﻿using UnityEngine;
using SimpleJSON;
using System;
using MVR.FileManagementSecure;
using UnityEngine.UI;
using System.Collections.Generic;
using System.Linq;
using System.Collections;
using UnityStandardAssets.ImageEffects;
using Utils.UIUtils;
using Leap.Unity;
using static JSONStorableParam;
using Mono.CSharp;

namespace AWWalker
{
    public class GenitalMultiPassP35: MVRScript
    {


        #region MultiPass Vars
        private List<UIDynamic> _currentUI;

        private bool DebugBuild = true;
        public int poop = 0;
        protected const string gmpversion = "35.P.0";
        protected const int GMP_VERSION = 35;
        protected const string hubpat = "PATREON";
        protected const string isDev = "HUB Release";
        protected const string _saveExt = "json";
        protected const string _saveExtwp = ".json";
        protected const string PUBLISH_DATE = "2023.12.06";
        private const string _gmpSavePath = "Saves\\PluginData\\AWWalker\\AWWMultiPass";
        private const string _gmpLoadPath = "Saves\\PluginData\\AWWalker";

        //GLOBAL STATICS
        protected Color cClear = Color.clear;
        protected Color cBlue = Color.blue;
        protected Color cWhite = Color.white;
        protected Color cRed = Color.red;
        protected Color cCyan = Color.cyan;
        protected Color cBlack = Color.black;
        protected Color cGray = Color.gray;
        protected Color cGreen = Color.green;
        protected Color cYellow = Color.yellow;
        protected Color cMagenta = Color.magenta;


        protected bool isEnabled = true;


        //MEASURES
        private static FreeControllerV3 torso;
        private static FreeControllerV3 lK1;
        private static FreeControllerV3 rK1;
        private static FreeControllerV3 rT1;
        private static FreeControllerV3 lT1;
        private int rndValue;
        private int rndPercent;

        private bool rightSide = true;
        private bool leftSide = false;

        protected JSONStorableBool CurveEnabled;
        protected JSONStorableBool isMultiPassEnabled;
        protected JSONStorableBool LRSync;
        protected JSONStorableBool lerpEnabled;
        protected JSONStorableBool SmothingEnabled;
        protected JSONStorableString Spacer;
        protected JSONStorableFloat floatSliderRNDAmt;

        #endregion
        #region Labia Majora spread Morphs and Floats
        private DAZMorph labiaMajoraMorph;
        protected JSONStorableFloat labiaMajoraMorphChangeMin;
        protected JSONStorableFloat labiaMajoraMorphChangeMax;

        private DAZMorph LabMajRMidMorph;
        protected JSONStorableFloat LabMajRMidMorphChangeMin;
        protected JSONStorableFloat LabMajRMidMorphChangeMax;

        private DAZMorph LabMajLUpMorph;
        protected JSONStorableFloat LabMajLUpMorphChangeMin;
        protected JSONStorableFloat LabMajLUpMorphChangeMax;

        private DAZMorph LabMajLMidMorph;
        protected JSONStorableFloat LabMajLMidMorphChangeMin;
        protected JSONStorableFloat LabMajLMidMorphChangeMax;

        private DAZMorph LabMajLLowMorph;
        protected JSONStorableFloat LabMajLLowMorphChangeMin;
        protected JSONStorableFloat LabMajLLowMorphChangeMax;

        private DAZMorph AWW_Majora_LeftUpperTopMorph;
        protected JSONStorableFloat AWW_Majora_LeftUpperTopMorphChangeMin;
        protected JSONStorableFloat AWW_Majora_LeftUpperTopMorphChangeMax;

        private DAZMorph AWW_Majora_RightUpperTopMorph;
        protected JSONStorableFloat AWW_Majora_RightUpperTopMorphChangeMin;
        protected JSONStorableFloat AWW_Majora_RightUpperTopMorphChangeMax;

        #endregion
        #region Labia Mionra spread Morphs and Floats
        private DAZMorph LabMinRMidMorph;
        protected JSONStorableFloat LabMinRMidMorphChangeMin;
        protected JSONStorableFloat LabMinRMidMorphChangeMax;

        private DAZMorph LabMinRUpMorph;
        protected JSONStorableFloat LabMinRUpMorphChangeMin;
        protected JSONStorableFloat LabMinRUpMorphChangeMax;

        private DAZMorph LabMinLLowMorph;
        protected JSONStorableFloat LabMinLLowMorphChangeMin;
        protected JSONStorableFloat LabMinLLowMorphChangeMax;

        private DAZMorph LabMinLUpMorph;
        protected JSONStorableFloat LabMinLUpMorphChangeMin;
        protected JSONStorableFloat LabMinLUpMorphChangeMax;

        private DAZMorph LabMajRLowMorph;
        protected JSONStorableFloat LabMajRLowMorphChangeMin;
        protected JSONStorableFloat LabMajRLowMorphChangeMax;

        private DAZMorph LabMinRLowMorph;
        protected JSONStorableFloat LabMinRLowMorphChangeMin;
        protected JSONStorableFloat LabMinRLowMorphChangeMax;

        private DAZMorph LabMajRUpMorph;
        protected JSONStorableFloat LabMajRUpMorphChangeMin;
        protected JSONStorableFloat LabMajRUpMorphChangeMax;

        private DAZMorph LabMinLMidMorph;
        protected JSONStorableFloat LabMinLMidMorphChangeMin;
        protected JSONStorableFloat LabMinLMidMorphChangeMax;

        private DAZMorph labiaMinoraMorph;
        protected JSONStorableFloat labiaMinoraMorphChangeMin;
        protected JSONStorableFloat labiaMinoraMorphChangeMax;
        #endregion
        #region Centered Morphs and Floats

        private DAZMorph Genital_Area_RotationMorph;
        protected JSONStorableFloat Genital_Area_RotationRange;

        private DAZMorph HoodModMorph;
        protected JSONStorableFloat HoodModMorphChangeMin;
        protected JSONStorableFloat HoodModMorphChangeMax;

        private DAZMorph AWW_VagInternal_Size2;
        protected JSONStorableFloat AWW_VagInternal_Size2ChangeMin;
        protected JSONStorableFloat AWW_VagInternal_Size2ChangeMax;

        private DAZMorph AWW_Clitoris_Front_Back;
        protected JSONStorableFloat AWW_Clitoris_Front_BackMin;
        protected JSONStorableFloat AWW_Clitoris_Front_BackRange;

        private DAZMorph AWW_Clitoris_HoodBack;
        protected JSONStorableFloat AWW_Clitoris_HoodBackRange;

        private DAZMorph AWW_Clitoris_Size;
        protected JSONStorableFloat AWW_Clitoris_SizeRange;

        private DAZMorph AWW_Clitoris_HoodSize;
        protected JSONStorableFloat AWW_Clitoris_HoodSizeRange;

        private DAZMorph AWW_00_KegelMorph;
        protected JSONStorableFloat AWW_00_KegelMin;
        protected JSONStorableFloat AWW_00_KegelMax;

        private DAZMorph AWW_Anus_SpreadGape02Morph;
        protected JSONStorableFloat AWW_Anus_SpreadGape02Min;
        protected JSONStorableFloat AWW_Anus_SpreadGape02Max;

        private DAZMorph AWW_GenLabiaMajoraClosedAndSmoothMorph;
        protected JSONStorableFloat AWW_GenLabiaMajoraClosedAndSmoothMorphMin;
        protected JSONStorableFloat AWW_GenLabiaMajoraClosedAndSmoothMorphMax;

        private DAZMorph AWW_PuffyMajora_1Morph;
        protected JSONStorableFloat AWW_PuffyMajora_1Range;

        protected JSONStorableFloat OverallIntensity;
        private DAZMorph AWWLabiaMinSwell01Morph;
        protected JSONStorableFloat AWWLabiaMinSwell01Range;

        protected JSONStorableBool StaticMinApplication;
        protected JSONStorableBool StaticMaxApplication;

        private DAZMorph VAMExtremeExpansionMorph;
        protected JSONStorableFloat VAMExtremeExpansion;


        private DAZMorph Genital_TightMorph;
        protected JSONStorableFloat Genital_Tight;
        protected JSONStorableFloat quicknessJSON;
        protected JSONStorableFloat rndMinRangeLow;
        protected JSONStorableFloat rndMinRangeHigh;       
        protected JSONStorableFloat rndMaxRangeLow;
        protected JSONStorableFloat rndMaxRangeHigh;

        #endregion
        #region Labia Minora Length Adjustments Morphs and Floats
        private DAZMorph AWW_Left_Minora_Back_1_DownMorph;
        protected JSONStorableFloat flLMinB1D;
        private DAZMorph AWW_Left_Minora_Back_2_DownMorph;
        protected JSONStorableFloat flLMinB2D;
        private DAZMorph AWW_Left_Minora_Back_3_DownMorph;
        protected JSONStorableFloat flLMinB3D;
        private DAZMorph AWW_Right_Minora_Back_1_DownMorph;
        protected JSONStorableFloat flRMinB1D;
        private DAZMorph AWW_Right_Minora_Back_2_DownMorph;
        protected JSONStorableFloat flRMinB2D;
        private DAZMorph AWW_Right_Minora_Back_3_DownMorph;
        protected JSONStorableFloat flRMinB3D;
        protected DAZMorph AWW_Left_Minora_Front_DownMorph;
        protected JSONStorableFloat flLMinFD;
        protected DAZMorph AWW_Right_Minora_Front_DownMorph;
        protected JSONStorableFloat flRMinFD;
        private DAZMorph AWW_Left_Minora_Middle_1_DownMorph;
        protected JSONStorableFloat flLMinM1D;
        private DAZMorph AWW_Left_Minora_Middle_2_DownMorph;
        protected JSONStorableFloat flLMinM2D;
        private DAZMorph AWW_Left_Minora_Middle_3_DownMorph;
        protected JSONStorableFloat flLMinM3D;
        private DAZMorph AWW_Right_Minora_Middle_1_DownMorph;
        protected JSONStorableFloat flRMinM1D;
        private DAZMorph AWW_Right_Minora_Middle_2_DownMorph;
        protected JSONStorableFloat flRMinM2D;
        private DAZMorph AWW_Right_Minora_Middle_3_DownMorph;
        protected JSONStorableFloat flRMinM3D;
        //private DAZMorph AWW_LabiaMin_Swell_01Morph;
        //protected JSONStorableFloat flLMinSwell01;
        #endregion
        #region Bender Morphs and Floats

        private DAZMorph AWW_Bend_AN_01Morph;
        protected JSONStorableFloat AWW_Bend_AN_01min;
        protected JSONStorableFloat AWW_Bend_AN_01max;

        private DAZMorph AWW_Bend_AN_02Morph;
        protected JSONStorableFloat AWW_Bend_AN_02min;
        protected JSONStorableFloat AWW_Bend_AN_02max;

        private DAZMorph AWW_Bend_AN_03Morph;
        protected JSONStorableFloat AWW_Bend_AN_03min;
        protected JSONStorableFloat AWW_Bend_AN_03max;

        private DAZMorph AWW_Bend_AN_04Morph;
        protected JSONStorableFloat AWW_Bend_AN_04min;
        protected JSONStorableFloat AWW_Bend_AN_04max;

        private DAZMorph AWW_Bend_AN_05Morph;
        protected JSONStorableFloat AWW_Bend_AN_05min;
        protected JSONStorableFloat AWW_Bend_AN_05max;

        private DAZMorph AWW_Bend_LC_01Morph;
        protected JSONStorableFloat AWW_Bend_LC_01min;
        protected JSONStorableFloat AWW_Bend_LC_01max;

        private DAZMorph AWW_Bend_LC_02Morph;
        protected JSONStorableFloat AWW_Bend_LC_02min;
        protected JSONStorableFloat AWW_Bend_LC_02max;

        private DAZMorph AWW_Bend_LC_03Morph;
        protected JSONStorableFloat AWW_Bend_LC_03min;
        protected JSONStorableFloat AWW_Bend_LC_03max;

        private DAZMorph AWW_Bend_LC_04Morph;
        protected JSONStorableFloat AWW_Bend_LC_04min;
        protected JSONStorableFloat AWW_Bend_LC_04max;

        private DAZMorph AWW_Bend_LC_05Morph;
        protected JSONStorableFloat AWW_Bend_LC_05min;
        protected JSONStorableFloat AWW_Bend_LC_05max;

        private DAZMorph AWW_Bend_LC_06Morph;
        protected JSONStorableFloat AWW_Bend_LC_06min;
        protected JSONStorableFloat AWW_Bend_LC_06max;

        private DAZMorph AWW_Bend_LC_07Morph;
        protected JSONStorableFloat AWW_Bend_LC_07min;
        protected JSONStorableFloat AWW_Bend_LC_07max;

        private DAZMorph AWW_Bend_LC_08Morph;
        protected JSONStorableFloat AWW_Bend_LC_08min;
        protected JSONStorableFloat AWW_Bend_LC_08max;

        private DAZMorph AWW_Bend_LC_09Morph;
        protected JSONStorableFloat AWW_Bend_LC_09min;
        protected JSONStorableFloat AWW_Bend_LC_09max;




        private DAZMorph AWW_Anus_Z_Adjust_01Morph;
        protected JSONStorableFloat AWW_Anus_Z_Adjust_01max;

        private DAZMorph AWW_G2F_Flatter_GenMorph;
        protected JSONStorableFloat AWW_G2F_Flatter_Genmax;

        private DAZMorph AWW_HoodLength_301Morph;
        protected JSONStorableFloat AWW_HoodLength_301max;
 
        private DAZMorph AWW_HoodLength_302Morph;
        protected JSONStorableFloat AWW_HoodLength_302max;

        private DAZMorph AWW_LowerRegion_Z_01Morph;
        protected JSONStorableFloat AWW_LowerRegion_Z_01max;

        private DAZMorph AWW_LowerRegion_Z_02Morph;
        protected JSONStorableFloat AWW_LowerRegion_Z_02max;











        #endregion




        #region Core Functions
        public override void Init()
        {
            ShowMenuUI();
            altInit();
            SwitchUI();
            ShowStartUI();
            tabStaticMorphUI();
        }
        public void altInit()
        {
            MapDazMorphs();
            RegisterJSONParams();
        }
        public void Update()
        {

            if (isMultiPassEnabled.val)
            {
                if (StaticMinApplication.val)
                {
                    ApplyMinValuesToMorphs();
                }
                else if (StaticMaxApplication.val)
                {
                    ApplyMaxValuesToMorphs();
                }
                else
                {
                    LRSyncApply();
                    ApplySpreadValuesToMorphs();
                };
                ApplyAsymetricalMinoraValues();
                ApplyStaticValuesToMorphs();
                ApplyBenderValuesToMorphs();

            }
        }
        #endregion

        #region UI Functions
        public void BendersMorphUI()
        {
            createSectionTitle("Gen Benders", cBlack, "Anus Benders", cBlack);

            createSLIDER(AWW_Bend_LC_01max, cBlue, false);
            createSLIDER(AWW_Bend_LC_02max, cBlue, false);
            createSLIDER(AWW_Bend_LC_03max, cBlue, false);
            createSLIDER(AWW_Bend_LC_04max, cBlue, false);
            createSLIDER(AWW_Bend_LC_05max, cBlue, false);
            createSLIDER(AWW_Bend_LC_06max, cBlue, false);
            createSLIDER(AWW_Bend_LC_07max, cBlue, false);
            createSLIDER(AWW_Bend_LC_08max, cBlue, false);
            createSLIDER(AWW_Bend_LC_09max, cBlue, false);

            createSLIDER(AWW_LowerRegion_Z_01max, cMagenta, false);
            createSLIDER(AWW_LowerRegion_Z_02max, cMagenta, false);

            createSLIDER(AWW_Bend_AN_01max, cBlue, true);
            createSLIDER(AWW_Bend_AN_02max, cBlue, true);
            createSLIDER(AWW_Bend_AN_03max, cBlue, true);
            createSLIDER(AWW_Bend_AN_04max, cBlue, true);
            createSLIDER(AWW_Bend_AN_05max, cBlue, true);
            createSLIDER(AWW_Anus_Z_Adjust_01max, cMagenta, true);




            
    }
    
        public void ShowStartUI()
        {

            UIDynamicToggle tglIsEnabled = CreateToggle(isMultiPassEnabled, leftSide);
            _currentUI.Add(tglIsEnabled);


            //string txtTitle = "RELEASE Version: " + gmpversion + " " + isDev;
            //JSONStorableString strTitle = new JSONStorableString("Title", txtTitle);
            //UIDynamicTextField textfieldtitl = CreateTextField(strTitle, rightSide);
            //textfieldtitl.textColor = cGreen;
            //textfieldtitl.height = 20;
            //textfieldtitl.backgroundColor = cClear;
            //_currentUI.Add(textfieldtitl);

            UIDynamic spacer33 = CreateSpacer(true);
            spacer33.height = 75;
            _currentUI.Add(spacer33);

            var savePSwitchUI = CreateButton("Save Preset", rightSide);
            savePSwitchUI.button.onClick.AddListener(() =>
            {
                FileManagerSecure.CreateDirectory(_gmpSavePath);
                var fileBrowserUI = SuperController.singleton.fileBrowserUI;
                fileBrowserUI.SetTitle("Save colliders preset");
                fileBrowserUI.showFiles = true;
                fileBrowserUI.fileRemovePrefix = null;
                fileBrowserUI.hideExtension = true;
                fileBrowserUI.keepOpen = false;
                fileBrowserUI.fileFormat = _saveExt;
                fileBrowserUI.defaultPath = _gmpSavePath;
                fileBrowserUI.showDirs = true;
                fileBrowserUI.SetTextEntry(true);
                fileBrowserUI.Show(saveUI);
                fileBrowserUI.fileEntryField.text = (int)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds + "." + _saveExt;
                fileBrowserUI.ActivateFileNameField();
            });
            var loadPSwitchUI = CreateButton("Load Preset", true);
            loadPSwitchUI.button.onClick.AddListener(() =>
            {
                FileManagerSecure.CreateDirectory(_gmpLoadPath);
                var shortcuts = FileManagerSecure.GetShortCutsForDirectory(_gmpLoadPath);
                SuperController.singleton.GetMediaPathDialog(loadUI, _saveExt, _gmpLoadPath, false, true, false, null, false, shortcuts);
            });
            _currentUI.Add(savePSwitchUI);
            _currentUI.Add(loadPSwitchUI);


            
            UIDynamicButton btnDefaults = CreateButton("Load Defaults", true);
            btnDefaults.button.onClick.AddListener(ApplyDefaults);
            btnDefaults.buttonText.fontSize = 28;

            _currentUI.Add(btnDefaults);

            UIDynamic spacer1 = CreateSpacer(false);
            spacer1.height = 5;
            _currentUI.Add(spacer1);

            UIDynamic spacer1R = CreateSpacer(true);
            spacer1R.height = 60;
            _currentUI.Add(spacer1R);


            var btnZeroed = CreateButton("Zero All", true);
            btnZeroed.button.onClick.AddListener(() =>
            {
                zeroAllSettings();
            });
            _currentUI.Add(btnZeroed);


            createLeftSPACER(55);
            var sldOverallIntensity = CreateSlider(OverallIntensity, false);
            _currentUI.Add(sldOverallIntensity);

            UIDynamicToggle tglCurveEnabled = CreateToggle(CurveEnabled, false);
            UIDynamicToggle tglSmoothingEnabled = CreateToggle(lerpEnabled, false);
            _currentUI.Add(tglCurveEnabled);
            _currentUI.Add(tglSmoothingEnabled);


            UIDynamicSlider sldQuickness = CreateSlider(quicknessJSON, false);
            UIDynamicToggle tglLRsync = CreateToggle(LRSync, true);
            _currentUI.Add(sldQuickness);
            _currentUI.Add(tglLRsync);
        }
    
        private void SwitchUI()
        {
            UIUtils.RemoveUI(this, _currentUI);

            _currentUI = new List<UIDynamic>();
        }
        public void tabStaticMorphUI()
        {


        createTitle("Static Morphs", cBlue, "These morphs aren't affected by opening and closing position.", cBlack);
            int statSldfontSize = 23;

            UIDynamicSlider sldClitHoodBack = CreateSlider(AWW_Clitoris_HoodBackRange, false);
            sldClitHoodBack.labelText.fontSize = statSldfontSize;
            _currentUI.Add(sldClitHoodBack);

            UIDynamicSlider sldClitHoodSize = CreateSlider(AWW_Clitoris_HoodSizeRange, false);
            sldClitHoodSize.labelText.fontSize = statSldfontSize;
            _currentUI.Add(sldClitHoodSize);

            UIDynamicSlider sldPuffyMajor = CreateSlider(AWW_PuffyMajora_1Range, false);
            sldPuffyMajor.labelText.fontSize = statSldfontSize;
            _currentUI.Add(sldPuffyMajor);

            UIDynamicSlider sldClitHoodFB = CreateSlider(AWW_Clitoris_Front_BackRange, true);
            sldClitHoodFB.labelText.fontSize = statSldfontSize;
            _currentUI.Add(sldClitHoodFB);

            UIDynamicSlider sldClitSize = CreateSlider(AWW_Clitoris_SizeRange, true);
            sldClitSize.labelText.fontSize = statSldfontSize;
            _currentUI.Add(sldClitSize);

            UIDynamicSlider sldAWWSwellMinoroa = CreateSlider(AWWLabiaMinSwell01Range, true);
            sldAWWSwellMinoroa.labelText.fontSize = statSldfontSize;
            _currentUI.Add(sldAWWSwellMinoroa);

            UIDynamicSlider sldVAMExtremeExpansion = CreateSlider(VAMExtremeExpansion, true);
            sldVAMExtremeExpansion.labelText.fontSize = statSldfontSize;
            _currentUI.Add(sldVAMExtremeExpansion);

            UIDynamicSlider sldGenital_Tight = CreateSlider(Genital_Tight, false);
            sldGenital_Tight.labelText.fontSize = statSldfontSize;
            _currentUI.Add(sldGenital_Tight);

            

            UIDynamicSlider sldGenital_Area_Rotation = CreateSlider(Genital_Area_RotationRange, true);
            sldGenital_Area_Rotation.labelText.fontSize = statSldfontSize;
            _currentUI.Add(sldGenital_Area_Rotation);

            createMorphSLIDER(AWW_HoodLength_301max, cMagenta, false);
            createMorphSLIDER(AWW_HoodLength_302max, cMagenta, false);
            createMorphSLIDER(AWW_G2F_Flatter_Genmax, cMagenta, true);
            //createLeftSPACER(120);

        }
        public void CenteredMorphUI()
        {
            #region REmove this

            #endregion


            createTitle("Centered Morphs", cBlue, "Morphs that affect center tid bits", cBlack);

            createMorphSLIDER(HoodModMorphChangeMin, cBlue, false);



            createMorphSLIDER(HoodModMorphChangeMax, cBlue, true);

            createMorphSLIDER(AWW_VagInternal_Size2ChangeMin, cBlue, false);
            createMorphSLIDER(AWW_VagInternal_Size2ChangeMax, cBlue, true);

            createMorphSLIDER(AWW_00_KegelMin, cBlue, false);
            createMorphSLIDER(AWW_00_KegelMax, cBlue, true);

            createMorphSLIDER(AWW_Anus_SpreadGape02Min, cBlue, false);
            createMorphSLIDER(AWW_Anus_SpreadGape02Max, cBlue, true);

            createMorphSLIDER(AWW_GenLabiaMajoraClosedAndSmoothMorphMin, cBlue, false);
            createMorphSLIDER(AWW_GenLabiaMajoraClosedAndSmoothMorphMax, cBlue, true);



        }


        public void RandomizeMorphUI()
        {

            createTitle("Randomization ", cGreen, "Disable Smoothing and start with low strength, remember to save preset. Strength also dictates MAX open possible.", cGreen);


            UIDynamic spacerRa1R = CreateSpacer(true);
            spacerRa1R.height = 30;
            _currentUI.Add(spacerRa1R);

            UIDynamic spacerLa1L = CreateSpacer(false);
            spacerLa1L.height = 25;
            _currentUI.Add(spacerLa1L);

            createSLIDER(floatSliderRNDAmt, cBlue, false);

            UIDynamicButton btnRndACurrent = CreateButton("Randomize Minora From Current Settings", true);
            btnRndACurrent.button.onClick.AddListener(rndMinACur);
            btnRndACurrent.buttonText.fontSize = 24;
            _currentUI.Add(btnRndACurrent);

            UIDynamicButton btnRndIntTester = CreateButton("", true);
            //btnRndIntTester.button.onClick.AddListener(rndTest);
            btnRndIntTester.buttonText.fontSize = 24;
            _currentUI.Add(btnRndIntTester);

            UIDynamicButton btnRndIntMin = CreateButton("Asymmetrical Randomize Minora ", false);
            btnRndIntMin.button.onClick.AddListener(rndMinA);
            btnRndIntMin.buttonText.fontSize = 24;
            _currentUI.Add(btnRndIntMin);

            UIDynamicButton btnRndIntMinS = CreateButton("Symmetrical Randomize Minora ", true);
            btnRndIntMinS.button.onClick.AddListener(rndMinS);
            btnRndIntMinS.buttonText.fontSize = 24;
            _currentUI.Add(btnRndIntMinS);

            UIDynamicButton btnRndIntMajS = CreateButton("Symmetrical Randomize Majora ", true);
            btnRndIntMajS.button.onClick.AddListener(rndMajS);
            btnRndIntMajS.buttonText.fontSize = 24;
            _currentUI.Add(btnRndIntMajS);


            UIDynamicButton btnRndIntMaj = CreateButton("Asymmetrical Randomize Majora", false);
            btnRndIntMaj.button.onClick.AddListener(rndMajA);
            btnRndIntMaj.buttonText.fontSize = 24;
            _currentUI.Add(btnRndIntMaj);

            UIDynamicButton btnRndInt = CreateButton("Asymmetrical Randomize Min/Maj", false);
            btnRndInt.button.onClick.AddListener(rndBothA);
            btnRndInt.buttonText.fontSize = 24;
            _currentUI.Add(btnRndInt);

            UIDynamicButton btnRndIntS = CreateButton("Symmetrical Randomize Min/Maj", true);
            btnRndIntS.button.onClick.AddListener(rndBothS);
            btnRndIntS.buttonText.fontSize = 24;
            _currentUI.Add(btnRndIntS);





            //UIDynamicButton btnRndIntTesterPrint = CreateButton("PritVals", true);
            //btnRndIntTesterPrint.button.onClick.AddListener(fRndIntTesterPrint);
            //btnRndIntTesterPrint.buttonText.fontSize = 24;
            //_currentUI.Add(btnRndIntTesterPrint);
        }

        public void rndTest()
        {
            rndMinA(); //Thread.Sleep(1000);
            rndMajA(); //Thread.Sleep(1000); 
            rndMajS(); //Thread.Sleep(1000); 
            rndMajS(); //Thread.Sleep(1000); 
        }




        public void fRndIntTesterPrint()
        {
            slm("rUPmin  " + LabMinRUpMorphChangeMin.val.ToString());
            slm("rUPmax  " + LabMinRUpMorphChangeMax.val.ToString());
            slm("rMIDmin " + LabMinRMidMorphChangeMin.val.ToString());
            slm("rMIDmax " + LabMinRMidMorphChangeMax.val.ToString());
            slm("rLOWmin " + LabMinRLowMorphChangeMin.val.ToString());
            slm("rLOWmax " + LabMinRLowMorphChangeMax.val.ToString());

            slm("lUPmin  " + LabMinLUpMorphChangeMin.val.ToString());
            slm("lUPmax  " + LabMinLUpMorphChangeMax.val.ToString());
            slm("lMIDmin " + LabMinLMidMorphChangeMin.val.ToString());
            slm("lMIDmax " + LabMinLMidMorphChangeMax.val.ToString());
            slm("lLOWmin " + LabMinLLowMorphChangeMin.val.ToString());
            slm("lLOWmax " + LabMinLLowMorphChangeMax.val.ToString());
        }
        public void rndBothA()
        {
            rndMinA();
            rndMajA();

        }
        public void rndBothS()
        {
            rndMinS();
            rndMajS();

        }
        public void rndMinA()
        {
            SuperController.LogMessage("Minora Randomized, proceed to minora tab to adjust open close amounts.");
            LabMinRUpMorphChangeMin.val = 0;
            LabMinRUpMorphChangeMax.val = rndValMax();
            LabMinRMidMorphChangeMin.val = 0;
            LabMinRMidMorphChangeMax.val = rndValMax();
            LabMinRLowMorphChangeMin.val = 0;
            LabMinRLowMorphChangeMax.val = rndValMax();


            LabMinLUpMorphChangeMin.val = 0;
            LabMinLUpMorphChangeMax.val = rndValMax();
            LabMinLMidMorphChangeMin.val = 0;
            LabMinLMidMorphChangeMax.val = rndValMax();
            LabMinLLowMorphChangeMin.val = 0;
            LabMinLLowMorphChangeMax.val = rndValMax();
            
            flLMinFD.val = rndValMin();
            flLMinM1D.val = rndValMin();
            flLMinM2D.val = rndValMin();
            flLMinM3D.val = rndValMin();
            
            flRMinFD.val = flLMinFD.val;
            flRMinM1D.val = flLMinM1D.val;
            flRMinM2D.val = flLMinM2D.val;
            flRMinM3D.val = flLMinM3D.val;
        }
        public void rndMajA() 
        {
            SuperController.LogMessage("Majora Randomized, proceed to majora tab to adjust open close amounts.");
            //rndVal();

            LabMajRUpMorphChangeMin.val = 0;
            LabMajRUpMorphChangeMax.val = rndValMax();
            LabMajRMidMorphChangeMin.val =  0;
            LabMajRMidMorphChangeMax.val = rndValMax();
            LabMajRLowMorphChangeMin.val = 0;
            LabMajRLowMorphChangeMax.val = rndValMax();
            LabMajLUpMorphChangeMin.val = 0;
            LabMajLUpMorphChangeMax.val = rndValMax();
            LabMajLMidMorphChangeMin.val = 0;
            LabMajLMidMorphChangeMax.val = rndValMax();
            LabMajLLowMorphChangeMin.val = 0;
            LabMajLLowMorphChangeMax.val = rndValMax();
            labiaMinoraMorphChangeMin.val = 0;
            labiaMinoraMorphChangeMax.val = rndValMax();
            labiaMajoraMorphChangeMin.val = 0;
            labiaMajoraMorphChangeMax.val = rndValMax();
        }

        public void rndMinS()
        {
            SuperController.LogMessage("Minora Randomized, proceed to minora tab to adjust open close amounts.");
            LabMinRUpMorphChangeMin.val = 0;
            LabMinRMidMorphChangeMin.val = 0;
            LabMinRLowMorphChangeMin.val = 0;
            LabMinLUpMorphChangeMin.val = 0;
            LabMinLMidMorphChangeMin.val = 0;
            LabMinLLowMorphChangeMin.val = 0;

            float NewRndVal;
            NewRndVal = rndValMax();

            LabMinRUpMorphChangeMax.val = NewRndVal ;
            LabMinLUpMorphChangeMax.val = NewRndVal; 

            NewRndVal = rndValMax();
            LabMinRMidMorphChangeMax.val = NewRndVal ;
            LabMinLMidMorphChangeMax.val = NewRndVal;

            NewRndVal = rndValMax();
            LabMinRLowMorphChangeMax.val = NewRndVal;
            LabMinLLowMorphChangeMax.val = NewRndVal;




            flRMinFD.val = rndValMin();
            flLMinM1D.val = rndValMin();
            flLMinM2D.val = rndValMin();
            flLMinM3D.val = rndValMin();

            flRMinM1D.val = rndValMin();
            flRMinM2D.val = rndValMin();
            flRMinM3D.val = rndValMin();
        }
        public void rndMajS()
        {
            SuperController.LogMessage("Majora Randomized, proceed to majora tab to adjust open close amounts.");
            //rndVal();

            LabMajRUpMorphChangeMin.val = 0;
            LabMajLUpMorphChangeMax.val = LabMajRUpMorphChangeMax.val = rndValMax();
            LabMajRMidMorphChangeMin.val = 0;
            LabMajLMidMorphChangeMax.val = LabMajRMidMorphChangeMax.val = rndValMax();
            LabMajRLowMorphChangeMin.val = 0;
            LabMajLLowMorphChangeMax.val = LabMajRLowMorphChangeMax.val = rndValMax();



        }

        public float minmaxval(float val2rnd)
        {
            float lmrumc = rndValcur() + val2rnd;
            if (lmrumc < -.9) { lmrumc = -0.9f; }
            else if (lmrumc > 0.9f) { lmrumc = 0.9f; }
            return lmrumc;
        }

        public void rndMinACur()
        {
            //SuperController.LogMessage("Minora Randomized, proceed to minora tab to adjust open close amounts.");

            LabMinRUpMorphChangeMin.val = 0;
            LabMinRUpMorphChangeMax.val = minmaxval(LabMinRUpMorphChangeMax.val);

            LabMinRMidMorphChangeMin.val = 0;
            LabMinRMidMorphChangeMax.val = minmaxval(LabMinRMidMorphChangeMax.val);

            LabMinRLowMorphChangeMin.val = 0;
            LabMinRLowMorphChangeMax.val = minmaxval(LabMinRLowMorphChangeMax.val);

            LabMinLUpMorphChangeMin.val = 0;
            LabMinLUpMorphChangeMax.val = minmaxval(LabMinLUpMorphChangeMax.val);

            LabMinLMidMorphChangeMin.val = 0;
            LabMinLMidMorphChangeMax.val = minmaxval(LabMinLMidMorphChangeMax.val);

            LabMinLLowMorphChangeMin.val = 0;
            LabMinLLowMorphChangeMax.val = minmaxval(LabMinLLowMorphChangeMax.val);

            flLMinFD.val = minmaxval(flLMinFD.val);
            flLMinM1D.val = minmaxval(flLMinM1D.val);
            flLMinM2D.val = minmaxval(flLMinM2D.val);
            flLMinM3D.val = minmaxval(flLMinM3D.val);

            flRMinFD.val = flLMinFD.val;
            flRMinM1D.val = flLMinM1D.val;
            flRMinM2D.val = flLMinM2D.val;
            flRMinM3D.val = flLMinM3D.val;
        }
        public void rndMajACur()
        {
            SuperController.LogMessage("Majora Randomized, proceed to majora tab to adjust open close amounts.");
            //rndVal();

            LabMajRUpMorphChangeMin.val = 0;
            LabMajRUpMorphChangeMax.val = rndValMax();
            LabMajRMidMorphChangeMin.val = 0;
            LabMajRMidMorphChangeMax.val = rndValMax();
            LabMajRLowMorphChangeMin.val = 0;
            LabMajRLowMorphChangeMax.val = rndValMax();
            LabMajLUpMorphChangeMin.val = 0;
            LabMajLUpMorphChangeMax.val = rndValMax();
            LabMajLMidMorphChangeMin.val = 0;
            LabMajLMidMorphChangeMax.val = rndValMax();
            LabMajLLowMorphChangeMin.val = 0;
            LabMajLLowMorphChangeMax.val = rndValMax();
            labiaMinoraMorphChangeMin.val = 0;
            labiaMinoraMorphChangeMax.val = rndValMax();
            labiaMajoraMorphChangeMin.val = 0;
            labiaMajoraMorphChangeMax.val = rndValMax();
        }

        public void rndMinSCur()
        {
            SuperController.LogMessage("Minora Randomized, proceed to minora tab to adjust open close amounts.");
            LabMinRUpMorphChangeMin.val = 0;
            LabMinRMidMorphChangeMin.val = 0;
            LabMinRLowMorphChangeMin.val = 0;
            LabMinLUpMorphChangeMin.val = 0;
            LabMinLMidMorphChangeMin.val = 0;
            LabMinLLowMorphChangeMin.val = 0;

            float NewRndVal;
            NewRndVal = rndValMax();

            LabMinRUpMorphChangeMax.val = NewRndVal;
            LabMinLUpMorphChangeMax.val = NewRndVal;

            NewRndVal = rndValMax();
            LabMinRMidMorphChangeMax.val = NewRndVal;
            LabMinLMidMorphChangeMax.val = NewRndVal;

            NewRndVal = rndValMax();
            LabMinRLowMorphChangeMax.val = NewRndVal;
            LabMinLLowMorphChangeMax.val = NewRndVal;




            flRMinFD.val = rndValMin();
            flLMinM1D.val = rndValMin();
            flLMinM2D.val = rndValMin();
            flLMinM3D.val = rndValMin();

            flRMinM1D.val = rndValMin();
            flRMinM2D.val = rndValMin();
            flRMinM3D.val = rndValMin();
        }
        public void rndMajSCur()
        {
            SuperController.LogMessage("Majora Randomized, proceed to majora tab to adjust open close amounts.");
            //rndVal();

            LabMajRUpMorphChangeMin.val = 0;
            LabMajLUpMorphChangeMax.val = LabMajRUpMorphChangeMax.val = rndValMax();
            LabMajRMidMorphChangeMin.val = 0;
            LabMajLMidMorphChangeMax.val = LabMajRMidMorphChangeMax.val = rndValMax();
            LabMajRLowMorphChangeMin.val = 0;
            LabMajLLowMorphChangeMax.val = LabMajRLowMorphChangeMax.val = rndValMax();



        }

        public float rndValcur()
        {
            System.Random rnd = new System.Random();
            float rtrnVal = (float)GetRandomNumber(-1, 1);
            rtrnVal = rtrnVal * floatSliderRNDAmt.val;
            return rtrnVal;
        }
        public float rndValMin()
        {
            System.Random rnd = new System.Random();
            float rtrnVal = (float)GetRandomNumber(-1, 0);
            rtrnVal = rtrnVal * floatSliderRNDAmt.val;
            return rtrnVal;



        }

        static System.Random random = new System.Random();
        public double GetRandomNumber(double minimum, double maximum)
        {
            return random.NextDouble() * (maximum - minimum) + minimum;
        }

        public float rndValMax()
        {
            System.Random rnd = new System.Random();
            
            float rtrnVal = (float)GetRandomNumber(0, 1);
            rtrnVal = rtrnVal * floatSliderRNDAmt.val;
//            slm(rtrnVal.ToString());

            return rtrnVal;



        }
        public void MajoraMorphUI()
        {

            createTitle("Labia Majora", cBlack, "Naughty by nature", cBlack);
            createMorphSLIDER(labiaMajoraMorphChangeMin, cBlue, false);
            createMorphSLIDER(labiaMajoraMorphChangeMax, cBlue, true);
            createMorphSLIDER(AWW_Majora_RightUpperTopMorphChangeMin, cBlue, false);
            createMorphSLIDER(AWW_Majora_RightUpperTopMorphChangeMax, cBlue, true);
            createMorphSLIDER(AWW_Majora_LeftUpperTopMorphChangeMin, cBlue, false);
            createMorphSLIDER(AWW_Majora_LeftUpperTopMorphChangeMax, cBlue, true);
            createMorphSLIDER(LabMajRUpMorphChangeMin, cBlue, false);
            createMorphSLIDER(LabMajRUpMorphChangeMax, cBlue, true);
            createMorphSLIDER(LabMajLUpMorphChangeMin, cBlue, false);
            createMorphSLIDER(LabMajLUpMorphChangeMax, cBlue, true);
            createMorphSLIDER(LabMajRMidMorphChangeMin, cBlue, false);
            createMorphSLIDER(LabMajRMidMorphChangeMax, cBlue, true);
            createMorphSLIDER(LabMajLMidMorphChangeMin, cBlue, false);
            createMorphSLIDER(LabMajLMidMorphChangeMax, cBlue, true);
            createMorphSLIDER(LabMajRLowMorphChangeMin, cBlue, false);
            createMorphSLIDER(LabMajRLowMorphChangeMax, cBlue, true);
            createMorphSLIDER(LabMajLLowMorphChangeMin, cBlue, false);
            createMorphSLIDER(LabMajLLowMorphChangeMax, cBlue, true);
        }
        public void MinoraMorphUI()
        {

            createTitle("Labia Minora", cBlack, "Hooray for boobies", cBlack);
            createMorphSLIDER(labiaMinoraMorphChangeMin, cBlue, false);
            createMorphSLIDER(labiaMinoraMorphChangeMax, cBlue, true);
            createMorphSLIDER(LabMinRUpMorphChangeMin, cBlue, false);
            createMorphSLIDER(LabMinRUpMorphChangeMax, cBlue, true);
            createMorphSLIDER(LabMinLUpMorphChangeMin, cBlue, false);
            createMorphSLIDER(LabMinLUpMorphChangeMax, cBlue, true);
            createMorphSLIDER(LabMinRMidMorphChangeMin, cBlue, false);
            createMorphSLIDER(LabMinRMidMorphChangeMax, cBlue, true);
            createMorphSLIDER(LabMinLMidMorphChangeMin, cBlue, false);
            createMorphSLIDER(LabMinLMidMorphChangeMax, cBlue, true);
            createMorphSLIDER(LabMinRLowMorphChangeMin, cBlue, false);
            createMorphSLIDER(LabMinRLowMorphChangeMax, cBlue, true);
            createMorphSLIDER(LabMinLLowMorphChangeMin, cBlue, false);
            createMorphSLIDER(LabMinLLowMorphChangeMax, cBlue, true);
        }
        public void MonsAndLabLengthMorphsUI()
        {
            createSectionTitle("Labia Asymmetrical", cMagenta, "Adjustments", cMagenta);
            createSLIDER(flLMinFD, cBlue, false);
            createSLIDER(flRMinFD, cBlue, true);
            createSLIDER(flLMinM1D, cBlue, false);
            createSLIDER(flLMinM2D, cBlue, false);
            createSLIDER(flLMinM3D, cBlue, false);
            createSLIDER(flRMinM1D, cBlue, true);
            createSLIDER(flRMinM2D, cBlue, true);
            createSLIDER(flRMinM3D, cBlue, true);

            createSLIDER(flLMinB1D, cBlue, false);
            createSLIDER(flLMinB2D, cBlue, false);
            createSLIDER(flLMinB3D, cBlue, false);
            createSLIDER(flRMinB1D, cBlue, true);
            createSLIDER(flRMinB2D, cBlue, true);
            createSLIDER(flRMinB3D, cBlue, true);



        }
        private void saveUI(string path)
        {


            SuperController.singleton.fileBrowserUI.fileFormat = "json";
            if (string.IsNullOrEmpty(path)) return;
            if (!path.ToLower().EndsWith(_saveExt)) { path = path + _saveExtwp; }





            JSONClass jc = new JSONClass();
            JSONClass info = new JSONClass();
            JSONClass userData = new JSONClass();
            info["AWWalker"] = "A White Walker";
            info["Format"] = "AWWalker.MultiPass";
            info["Version"].AsInt = GMP_VERSION;
            info["PushlishDate"] = PUBLISH_DATE;

            string creatorName = UserPreferences.singleton.creatorName;
            if (string.IsNullOrEmpty(creatorName))
                creatorName = "Unknown";
            userData["Author"] = creatorName;  //Saves you as author :)
            string datetime = DateTime.UtcNow.ToString();
            userData["SaveTimeStamp"] = datetime;

            jc["Info"] = info;
            jc["UserData"] = userData;
            jc["CurveEnabled"].AsBool = CurveEnabled.val;
            jc["OverallIntensity"].AsFloat = OverallIntensity.val;
            jc["LabMinRUpMorphChangeMin"].AsFloat = LabMinRUpMorphChangeMin.val;
            jc["LabMinRUpMorphChangeMax"].AsFloat = LabMinRUpMorphChangeMax.val;
            jc["LabMinRMidMorphChangeMin"].AsFloat = LabMinRMidMorphChangeMin.val;
            jc["LabMinRMidMorphChangeMax"].AsFloat = LabMinRMidMorphChangeMax.val;
            jc["LabMinRLowMorphChangeMin"].AsFloat = LabMinRLowMorphChangeMin.val;
            jc["LabMinRLowMorphChangeMax"].AsFloat = LabMinRLowMorphChangeMax.val;
            jc["LabMinLUpMorphChangeMin"].AsFloat = LabMinLUpMorphChangeMin.val;
            jc["LabMinLUpMorphChangeMax"].AsFloat = LabMinLUpMorphChangeMax.val;
            jc["LabMinLMidMorphChangeMin"].AsFloat = LabMinLMidMorphChangeMin.val;
            jc["LabMinLMidMorphChangeMax"].AsFloat = LabMinLMidMorphChangeMax.val;
            jc["LabMinLLowMorphChangeMin"].AsFloat = LabMinLLowMorphChangeMin.val;
            jc["LabMinLLowMorphChangeMax"].AsFloat = LabMinLLowMorphChangeMax.val;
            jc["LabMajRUpMorphChangeMin"].AsFloat = LabMajRUpMorphChangeMin.val;
            jc["LabMajRUpMorphChangeMax"].AsFloat = LabMajRUpMorphChangeMax.val;
            jc["LabMajRMidMorphChangeMin"].AsFloat = LabMajRMidMorphChangeMin.val;
            jc["LabMajRMidMorphChangeMax"].AsFloat = LabMajRMidMorphChangeMax.val;
            jc["LabMajRLowMorphChangeMin"].AsFloat = LabMajRLowMorphChangeMin.val;
            jc["LabMajRLowMorphChangeMax"].AsFloat = LabMajRLowMorphChangeMax.val;
            jc["LabMajLUpMorphChangeMin"].AsFloat = LabMajLUpMorphChangeMin.val;
            jc["LabMajLUpMorphChangeMax"].AsFloat = LabMajLUpMorphChangeMax.val;
            jc["LabMajLMidMorphChangeMin"].AsFloat = LabMajLMidMorphChangeMin.val;
            jc["LabMajLMidMorphChangeMax"].AsFloat = LabMajLMidMorphChangeMax.val;
            jc["LabMajLLowMorphChangeMin"].AsFloat = LabMajLLowMorphChangeMin.val;
            jc["LabMajLLowMorphChangeMax"].AsFloat = LabMajLLowMorphChangeMax.val;
            jc["labiaMinoraMorphChangeMin"].AsFloat = labiaMinoraMorphChangeMin.val;
            jc["labiaMinoraMorphChangeMax"].AsFloat = labiaMinoraMorphChangeMax.val;
            jc["labiaMajoraMorphChangeMin"].AsFloat = labiaMajoraMorphChangeMin.val;
            jc["labiaMajoraMorphChangeMax"].AsFloat = labiaMajoraMorphChangeMax.val;
            jc["HoodModMorphChangeMin"].AsFloat = HoodModMorphChangeMin.val;
            jc["HoodModMorphChangeMax"].AsFloat = HoodModMorphChangeMax.val;
            jc["AWW_VagInternal_Size2ChangeMin"].AsFloat = AWW_VagInternal_Size2ChangeMin.val;
            jc["AWW_VagInternal_Size2ChangeMax"].AsFloat = AWW_VagInternal_Size2ChangeMax.val;
            jc["AWW_PuffyMajora_1Range"].AsFloat = AWW_PuffyMajora_1Range.val;
            jc["AWW_Majora_RightUpperTopMorphChangeMin"].AsFloat = AWW_Majora_RightUpperTopMorphChangeMin.val;
            jc["AWW_Majora_RightUpperTopMorphChangeMax"].AsFloat = AWW_Majora_RightUpperTopMorphChangeMax.val;
            jc["AWW_Majora_LeftUpperTopMorphChangeMin"].AsFloat = AWW_Majora_LeftUpperTopMorphChangeMin.val;
            jc["AWW_Majora_LeftUpperTopMorphChangeMax"].AsFloat = AWW_Majora_LeftUpperTopMorphChangeMax.val;
            jc["AWW_GenLabiaMajoraClosedAndSmoothMorphMin"].AsFloat = AWW_GenLabiaMajoraClosedAndSmoothMorphMin.val;
            jc["AWW_GenLabiaMajoraClosedAndSmoothMorphMax"].AsFloat = AWW_GenLabiaMajoraClosedAndSmoothMorphMax.val;
            jc["AWW_Clitoris_SizeRange"].AsFloat = AWW_Clitoris_SizeRange.val;
            jc["AWW_Clitoris_SizeMax"].AsFloat = AWW_Clitoris_SizeRange.val;
            jc["AWW_Clitoris_HoodSizeRange"].AsFloat = AWW_Clitoris_HoodSizeRange.val;
            jc["AWW_Clitoris_HoodSizeMax"].AsFloat = AWW_Clitoris_HoodSizeRange.val;
            jc["AWW_Clitoris_HoodBackRange"].AsFloat = AWW_Clitoris_HoodBackRange.val;
            jc["AWW_Clitoris_HoodBackMax"].AsFloat = AWW_Clitoris_HoodBackRange.val;
            jc["AWW_Clitoris_Front_BackRange"].AsFloat = AWW_Clitoris_Front_BackRange.val;
            jc["AWW_Clitoris_Front_BackMax"].AsFloat = AWW_Clitoris_Front_BackRange.val;
            jc["AWW_Anus_SpreadGape02Min"].AsFloat = AWW_Anus_SpreadGape02Min.val;
            jc["AWW_Anus_SpreadGape02Max"].AsFloat = AWW_Anus_SpreadGape02Max.val;
            jc["AWW_00_KegelMin"].AsFloat = AWW_00_KegelMin.val;
            jc["AWW_00_KegelMax"].AsFloat = AWW_00_KegelMax.val;
            jc["AWWLabiaMinSwell01Range"].AsFloat = AWWLabiaMinSwell01Range.val;
            jc["VAMExtremeExpansion"].AsFloat = VAMExtremeExpansion.val;
            jc["Genital_Tight"].AsFloat = Genital_Tight.val;
            jc["quicknessJSON"].AsFloat = quicknessJSON.val;
            jc["flLMinB1D"].AsFloat = flLMinB1D.val;
            jc["flLMinB2D"].AsFloat = flLMinB2D.val;
            jc["flLMinB3D"].AsFloat = flLMinB3D.val;
            jc["flRMinB1D"].AsFloat = flRMinB1D.val;
            jc["flRMinB2D"].AsFloat = flRMinB2D.val;
            jc["flRMinB3D"].AsFloat = flRMinB3D.val;
            jc["flLMinFD"].AsFloat = flLMinFD.val;
            jc["flRMinFD"].AsFloat = flRMinFD.val;
            jc["flLMinM1D"].AsFloat = flLMinM1D.val;
            jc["flLMinM2D"].AsFloat = flLMinM2D.val;
            jc["flLMinM3D"].AsFloat = flLMinM3D.val;
            jc["flRMinM1D"].AsFloat = flRMinM1D.val;
            jc["flRMinM2D"].AsFloat = flRMinM2D.val;
            jc["flRMinM3D"].AsFloat = flRMinM3D.val;
            jc["AWW_Bend_AN_01min"].AsFloat = AWW_Bend_AN_01min.val;
            jc["AWW_Bend_AN_01max"].AsFloat = AWW_Bend_AN_01max.val;
            jc["AWW_Bend_AN_02min"].AsFloat = AWW_Bend_AN_02min.val;
            jc["AWW_Bend_AN_02max"].AsFloat = AWW_Bend_AN_02max.val;
            jc["AWW_Bend_AN_03min"].AsFloat = AWW_Bend_AN_03min.val;
            jc["AWW_Bend_AN_03max"].AsFloat = AWW_Bend_AN_03max.val;
            jc["AWW_Bend_AN_04min"].AsFloat = AWW_Bend_AN_04min.val;
            jc["AWW_Bend_AN_04max"].AsFloat = AWW_Bend_AN_04max.val;
            jc["AWW_Bend_AN_05min"].AsFloat = AWW_Bend_AN_05min.val;
            jc["AWW_Bend_AN_05max"].AsFloat = AWW_Bend_AN_05max.val;
            jc["AWW_Bend_LC_01min"].AsFloat = AWW_Bend_LC_01min.val;
            jc["AWW_Bend_LC_01max"].AsFloat = AWW_Bend_LC_01max.val;
            jc["AWW_Bend_LC_02min"].AsFloat = AWW_Bend_LC_02min.val;
            jc["AWW_Bend_LC_02max"].AsFloat = AWW_Bend_LC_02max.val;
            jc["AWW_Bend_LC_03min"].AsFloat = AWW_Bend_LC_03min.val;
            jc["AWW_Bend_LC_03max"].AsFloat = AWW_Bend_LC_03max.val;
            jc["AWW_Bend_LC_04min"].AsFloat = AWW_Bend_LC_04min.val;
            jc["AWW_Bend_LC_04max"].AsFloat = AWW_Bend_LC_04max.val;
            jc["AWW_Bend_LC_05min"].AsFloat = AWW_Bend_LC_05min.val;
            jc["AWW_Bend_LC_05max"].AsFloat = AWW_Bend_LC_05max.val;
            jc["AWW_Bend_LC_06min"].AsFloat = AWW_Bend_LC_06min.val;
            jc["AWW_Bend_LC_06max"].AsFloat = AWW_Bend_LC_06max.val;
            jc["AWW_Bend_LC_07min"].AsFloat = AWW_Bend_LC_07min.val;
            jc["AWW_Bend_LC_07max"].AsFloat = AWW_Bend_LC_07max.val;
            jc["AWW_Bend_LC_08min"].AsFloat = AWW_Bend_LC_08min.val;
            jc["AWW_Bend_LC_08max"].AsFloat = AWW_Bend_LC_08max.val;
            jc["AWW_Bend_LC_09min"].AsFloat = AWW_Bend_LC_09min.val;
            jc["AWW_Bend_LC_09max"].AsFloat = AWW_Bend_LC_09max.val;


            //NEW Ones ... V29
            jc["AWW_Anus_Z_Adjust_01max"].AsFloat = AWW_Anus_Z_Adjust_01max.val;
            jc["AWW_G2F_Flatter_Genmax"].AsFloat = AWW_G2F_Flatter_Genmax.val;
            jc["AWW_HoodLength_301max"].AsFloat = AWW_HoodLength_301max.val;
            jc["AWW_HoodLength_302max"].AsFloat = AWW_HoodLength_302max.val;
            jc["AWW_LowerRegion_Z_01max"].AsFloat = AWW_LowerRegion_Z_01max.val;
            jc["AWW_LowerRegion_Z_02max"].AsFloat = AWW_LowerRegion_Z_02max.val;






            SaveJSON(jc, path);

        }
        private void loadUI(string path)
        {

            if (string.IsNullOrEmpty(path))
                return;

            JSONClass jc = LoadJSON(path).AsObject;
            JSONClass info = new JSONClass();
            info = (JSONClass)jc["Info"];

            SuperController.LogMessage("Loading of " + path + "`n" + info["Format"].Value);

            if (info["Format"].Value == "AWWalker.MultiPass")
            {
                try
                {


                    try { CurveEnabled.val = jc["CurveEnabled"].AsBool; } catch { SuperController.LogError("Couldn't apply settings to :CurveEnabled"); }
                    try { OverallIntensity.val = jc["OverallIntensity"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :OverallIntensity"); }
                    try { LabMinRUpMorphChangeMin.val = jc["LabMinRUpMorphChangeMin"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :LabMinRUpMorphChangeMin"); }
                    try { LabMinRUpMorphChangeMax.val = jc["LabMinRUpMorphChangeMax"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :LabMinRUpMorphChangeMax"); }
                    try { LabMinRMidMorphChangeMin.val = jc["LabMinRMidMorphChangeMin"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :LabMinRMidMorphChangeMin"); }
                    try { LabMinRMidMorphChangeMax.val = jc["LabMinRMidMorphChangeMax"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :LabMinRMidMorphChangeMax"); }
                    try { LabMinRLowMorphChangeMin.val = jc["LabMinRLowMorphChangeMin"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :LabMinRLowMorphChangeMin"); }
                    try { LabMinRLowMorphChangeMax.val = jc["LabMinRLowMorphChangeMax"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :LabMinRLowMorphChangeMax"); }
                    try { LabMinLUpMorphChangeMin.val = jc["LabMinLUpMorphChangeMin"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :LabMinLUpMorphChangeMin"); }
                    try { LabMinLUpMorphChangeMax.val = jc["LabMinLUpMorphChangeMax"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :LabMinLUpMorphChangeMax"); }
                    try { LabMinLMidMorphChangeMin.val = jc["LabMinLMidMorphChangeMin"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :LabMinLMidMorphChangeMin"); }
                    try { LabMinLMidMorphChangeMax.val = jc["LabMinLMidMorphChangeMax"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :LabMinLMidMorphChangeMax"); }
                    try { LabMinLLowMorphChangeMin.val = jc["LabMinLLowMorphChangeMin"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :LabMinLLowMorphChangeMin"); }
                    try { LabMinLLowMorphChangeMax.val = jc["LabMinLLowMorphChangeMax"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :LabMinLLowMorphChangeMax"); }
                    try { LabMajRUpMorphChangeMin.val = jc["LabMajRUpMorphChangeMin"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :LabMajRUpMorphChangeMin"); }
                    try { LabMajRUpMorphChangeMax.val = jc["LabMajRUpMorphChangeMax"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :LabMajRUpMorphChangeMax"); }
                    try { LabMajRMidMorphChangeMin.val = jc["LabMajRMidMorphChangeMin"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :LabMajRMidMorphChangeMin"); }
                    try { LabMajRMidMorphChangeMax.val = jc["LabMajRMidMorphChangeMax"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :LabMajRMidMorphChangeMax"); }
                    try { LabMajRLowMorphChangeMin.val = jc["LabMajRLowMorphChangeMin"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :LabMajRLowMorphChangeMin"); }
                    try { LabMajRLowMorphChangeMax.val = jc["LabMajRLowMorphChangeMax"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :LabMajRLowMorphChangeMax"); }
                    try { LabMajLUpMorphChangeMin.val = jc["LabMajLUpMorphChangeMin"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :LabMajLUpMorphChangeMin"); }
                    try { LabMajLUpMorphChangeMax.val = jc["LabMajLUpMorphChangeMax"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :LabMajLUpMorphChangeMax"); }
                    try { LabMajLMidMorphChangeMin.val = jc["LabMajLMidMorphChangeMin"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :LabMajLMidMorphChangeMin"); }
                    try { LabMajLMidMorphChangeMax.val = jc["LabMajLMidMorphChangeMax"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :LabMajLMidMorphChangeMax"); }
                    try { LabMajLLowMorphChangeMin.val = jc["LabMajLLowMorphChangeMin"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :LabMajLLowMorphChangeMin"); }
                    try { LabMajLLowMorphChangeMax.val = jc["LabMajLLowMorphChangeMax"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :LabMajLLowMorphChangeMax"); }
                    try { labiaMinoraMorphChangeMin.val = jc["labiaMinoraMorphChangeMin"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :labiaMinoraMorphChangeMin"); }
                    try { labiaMinoraMorphChangeMax.val = jc["labiaMinoraMorphChangeMax"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :labiaMinoraMorphChangeMax"); }
                    try { labiaMajoraMorphChangeMin.val = jc["labiaMajoraMorphChangeMin"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :labiaMajoraMorphChangeMin"); }
                    try { labiaMajoraMorphChangeMax.val = jc["labiaMajoraMorphChangeMax"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :labiaMajoraMorphChangeMax"); }
                    try { HoodModMorphChangeMin.val = jc["HoodModMorphChangeMin"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :HoodModMorphChangeMin"); }
                    try { HoodModMorphChangeMax.val = jc["HoodModMorphChangeMax"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :HoodModMorphChangeMax"); }
                    try { AWW_VagInternal_Size2ChangeMin.val = jc["AWW_VagInternal_Size2ChangeMin"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_VagInternal_Size2ChangeMin"); }
                    try { AWW_VagInternal_Size2ChangeMax.val = jc["AWW_VagInternal_Size2ChangeMax"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_VagInternal_Size2ChangeMax"); }
                    try { AWW_PuffyMajora_1Range.val = jc["AWW_PuffyMajora_1Range"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_PuffyMajora_1Range"); }
                    try { AWW_Majora_RightUpperTopMorphChangeMin.val = jc["AWW_Majora_RightUpperTopMorphChangeMin"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Majora_RightUpperTopMorphChangeMin"); }
                    try { AWW_Majora_RightUpperTopMorphChangeMax.val = jc["AWW_Majora_RightUpperTopMorphChangeMax"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Majora_RightUpperTopMorphChangeMax"); }
                    try { AWW_Majora_LeftUpperTopMorphChangeMin.val = jc["AWW_Majora_LeftUpperTopMorphChangeMin"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Majora_LeftUpperTopMorphChangeMin"); }
                    try { AWW_Majora_LeftUpperTopMorphChangeMax.val = jc["AWW_Majora_LeftUpperTopMorphChangeMax"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Majora_LeftUpperTopMorphChangeMax"); }
                    try { AWW_GenLabiaMajoraClosedAndSmoothMorphMin.val = jc["AWW_GenLabiaMajoraClosedAndSmoothMorphMin"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_GenLabiaMajoraClosedAndSmoothMorphMin"); }
                    try { AWW_GenLabiaMajoraClosedAndSmoothMorphMax.val = jc["AWW_GenLabiaMajoraClosedAndSmoothMorphMax"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_GenLabiaMajoraClosedAndSmoothMorphMax"); }
                    try { AWW_Clitoris_SizeRange.val = jc["AWW_Clitoris_SizeRange"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Clitoris_SizeRange"); }
                    try { AWW_Clitoris_SizeRange.val = jc["AWW_Clitoris_SizeMax"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Clitoris_SizeMax"); }
                    try { AWW_Clitoris_HoodSizeRange.val = jc["AWW_Clitoris_HoodSizeRange"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Clitoris_HoodSizeRange"); }
                    try { AWW_Clitoris_HoodSizeRange.val = jc["AWW_Clitoris_HoodSizeMax"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Clitoris_HoodSizeMax"); }
                    try { AWW_Clitoris_HoodBackRange.val = jc["AWW_Clitoris_HoodBackRange"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Clitoris_HoodBackRange"); }
                    try { AWW_Clitoris_HoodBackRange.val = jc["AWW_Clitoris_HoodBackMax"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Clitoris_HoodBackMax"); }
                    try { AWW_Clitoris_Front_BackRange.val = jc["AWW_Clitoris_Front_BackRange"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Clitoris_Front_BackRange"); }
                    try { AWW_Clitoris_Front_BackRange.val = jc["AWW_Clitoris_Front_BackMax"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Clitoris_Front_BackMax"); }
                    try { AWW_Anus_SpreadGape02Min.val = jc["AWW_Anus_SpreadGape02Min"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Anus_SpreadGape02Min"); }
                    try { AWW_Anus_SpreadGape02Max.val = jc["AWW_Anus_SpreadGape02Max"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Anus_SpreadGape02Max"); }
                    try { AWW_00_KegelMin.val = jc["AWW_00_KegelMin"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_00_KegelMin"); }
                    try { AWW_00_KegelMax.val = jc["AWW_00_KegelMax"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_00_KegelMax"); }
                    try { AWWLabiaMinSwell01Range.val = jc["AWWLabiaMinSwell01Range"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWWLabiaMinSwell01Range"); }
                    try { AWW_Anus_SpreadGape02Min.val = jc["AWW_Anus_SpreadGape02Min"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Anus_SpreadGape02Min"); }
                    try { AWW_Anus_SpreadGape02Max.val = jc["AWW_Anus_SpreadGape02Max"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Anus_SpreadGape02Max"); }
                    try { AWW_GenLabiaMajoraClosedAndSmoothMorphMin.val = jc["AWW_GenLabiaMajoraClosedAndSmoothMorphMin"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_GenLabiaMajoraClosedAndSmoothMorphMin"); }
                    try { AWW_GenLabiaMajoraClosedAndSmoothMorphMax.val = jc["AWW_GenLabiaMajoraClosedAndSmoothMorphMax"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_GenLabiaMajoraClosedAndSmoothMorphMax"); }
                    try { AWW_PuffyMajora_1Range.val = jc["AWW_PuffyMajora_1Range"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_PuffyMajora_1Range"); }
                    try { OverallIntensity.val = jc["OverallIntensity"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :OverallIntensity"); }
                    try { AWWLabiaMinSwell01Range.val = jc["AWWLabiaMinSwell01Range"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWWLabiaMinSwell01Range"); }
                    try { VAMExtremeExpansion.val = jc["VAMExtremeExpansion"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :VAMExtremeExpansion"); }
                    try { Genital_Tight.val = jc["Genital_Tight"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :Genital_Tight"); }
                    try { quicknessJSON.val = jc["quicknessJSON"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :quicknessJSON"); }
                    try { flLMinB1D.val = jc["flLMinB1D"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :flLMinB1D"); }
                    try { flLMinB2D.val = jc["flLMinB2D"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :flLMinB2D"); }
                    try { flLMinB3D.val = jc["flLMinB3D"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :flLMinB3D"); }
                    try { flRMinB1D.val = jc["flRMinB1D"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :flRMinB1D"); }
                    try { flRMinB2D.val = jc["flRMinB2D"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :flRMinB2D"); }
                    try { flRMinB3D.val = jc["flRMinB3D"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :flRMinB3D"); }
                    try { flLMinFD.val = jc["flLMinFD"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :flLMinFD"); }
                    try { flRMinFD.val = jc["flRMinFD"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :flRMinFD"); }
                    try { flLMinM1D.val = jc["flLMinM1D"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :flLMinM1D"); }
                    try { flLMinM2D.val = jc["flLMinM2D"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :flLMinM2D"); }
                    try { flLMinM3D.val = jc["flLMinM3D"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :flLMinM3D"); }
                    try { flRMinM1D.val = jc["flRMinM1D"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :flRMinM1D"); }
                    try { flRMinM2D.val = jc["flRMinM2D"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :flRMinM2D"); }
                    try { flRMinM3D.val = jc["flRMinM3D"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :flRMinM3D"); }
                    try { AWW_Bend_AN_01min.val = jc["AWW_Bend_AN_01min"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Bend_AN_01min"); }
                    try { AWW_Bend_AN_01max.val = jc["AWW_Bend_AN_01max"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Bend_AN_01max"); }
                    try { AWW_Bend_AN_02min.val = jc["AWW_Bend_AN_02min"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Bend_AN_02min"); }
                    try { AWW_Bend_AN_02max.val = jc["AWW_Bend_AN_02max"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Bend_AN_02max"); }
                    try { AWW_Bend_AN_03min.val = jc["AWW_Bend_AN_03min"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Bend_AN_03min"); }
                    try { AWW_Bend_AN_03max.val = jc["AWW_Bend_AN_03max"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Bend_AN_03max"); }
                    try { AWW_Bend_AN_04min.val = jc["AWW_Bend_AN_04min"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Bend_AN_04min"); }
                    try { AWW_Bend_AN_04max.val = jc["AWW_Bend_AN_04max"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Bend_AN_04max"); }
                    try { AWW_Bend_AN_05min.val = jc["AWW_Bend_AN_05min"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Bend_AN_05min"); }
                    try { AWW_Bend_AN_05max.val = jc["AWW_Bend_AN_05max"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Bend_AN_05max"); }
                    try { AWW_Bend_LC_01min.val = jc["AWW_Bend_LC_01min"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Bend_LC_01min"); }
                    try { AWW_Bend_LC_01max.val = jc["AWW_Bend_LC_01max"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Bend_LC_01max"); }
                    try { AWW_Bend_LC_02min.val = jc["AWW_Bend_LC_02min"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Bend_LC_02min"); }
                    try { AWW_Bend_LC_02max.val = jc["AWW_Bend_LC_02max"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Bend_LC_02max"); }
                    try { AWW_Bend_LC_03min.val = jc["AWW_Bend_LC_03min"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Bend_LC_03min"); }
                    try { AWW_Bend_LC_03max.val = jc["AWW_Bend_LC_03max"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Bend_LC_03max"); }
                    try { AWW_Bend_LC_04min.val = jc["AWW_Bend_LC_04min"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Bend_LC_04min"); }
                    try { AWW_Bend_LC_04max.val = jc["AWW_Bend_LC_04max"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Bend_LC_04max"); }
                    try { AWW_Bend_LC_05min.val = jc["AWW_Bend_LC_05min"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Bend_LC_05min"); }
                    try { AWW_Bend_LC_05max.val = jc["AWW_Bend_LC_05max"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Bend_LC_05max"); }
                    try { AWW_Bend_LC_06min.val = jc["AWW_Bend_LC_06min"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Bend_LC_06min"); }
                    try { AWW_Bend_LC_06max.val = jc["AWW_Bend_LC_06max"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Bend_LC_06max"); }
                    try { AWW_Bend_LC_07min.val = jc["AWW_Bend_LC_07min"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Bend_LC_07min"); }
                    try { AWW_Bend_LC_07max.val = jc["AWW_Bend_LC_07max"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Bend_LC_07max"); }
                    try { AWW_Bend_LC_08min.val = jc["AWW_Bend_LC_08min"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Bend_LC_08min"); }
                    try { AWW_Bend_LC_08max.val = jc["AWW_Bend_LC_08max"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Bend_LC_08max"); }
                    try { AWW_Bend_LC_09min.val = jc["AWW_Bend_LC_09min"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Bend_LC_09min"); }
                    try { AWW_Bend_LC_09max.val = jc["AWW_Bend_LC_09max"].AsFloat; } catch { SuperController.LogError("Couldn't apply settings to :AWW_Bend_LC_09max"); }



                    try
                    {
                    AWW_Anus_Z_Adjust_01max.val= jc["AWW_Anus_Z_Adjust_01max"].AsFloat; ;
                    }
                    catch { SuperController.LogError("Couldn't apply settings to :AWW_Anus_Z_Adjust_01max (normal if you are loading a v28 or earlier file)"); }
                    try
                    {
                    AWW_G2F_Flatter_Genmax.val = jc["AWW_G2F_Flatter_Genmax"].AsFloat; ;
                    }
                    catch { SuperController.LogError("Couldn't apply settings to :AWW_G2F_Flatter_Genmax (normal if you are loading a v28 or earlier file)"); }
                    try
                    {
                    AWW_G2F_Flatter_Genmax.val = jc["AWW_HoodLength_301max"].AsFloat ; ;
                    }
                    catch { SuperController.LogError("Couldn't apply settings to :AWW_HoodLength_301max (normal if you are loading a v28 or earlier file)"); }
                    try
                    {
                    AWW_HoodLength_302max.val = jc["AWW_HoodLength_302max"].AsFloat; ;
                    }
                    catch { SuperController.LogError("Couldn't apply settings to :AWW_HoodLength_302max (normal if you are loading a v28 or earlier file)"); }
                    try
                    {
                    AWW_LowerRegion_Z_01max.val = jc["AWW_LowerRegion_Z_01max"].AsFloat; ;
                    }
                    catch { SuperController.LogError("Couldn't apply settings to :AWW_LowerRegion_Z_01max (normal if you are loading a v28 or earlier file)"); }
                    try
                    {
                    AWW_LowerRegion_Z_02max.val = jc["AWW_LowerRegion_Z_02max"].AsFloat; ;
                    }
                    catch { SuperController.LogError("Couldn't apply settings to :AWW_LowerRegion_Z_02max (normal if you are loading a v28 or earlier file)"); }
                }
                catch
                {
                    SuperController.LogError("Something Went Wrong Loading " + path);
                }
            }
            else
            {

                SuperController.LogError(path + " is not a valid AWWalker.MultiPass class save file.");
                return;
            }
        }
        public void DebugSectionUI()
        {
            createTitle("DEBUG", cRed, "Use the following to view max and miniumum positions", cBlack);
            createTitle("", cRed, "Can also be used to lock morphs in to a position, rather then using spread controller.", cBlack);
            createTitle("", cRed, "Setting not included in save.", cRed);
            UIDynamicToggle tglStaticMinOnly = CreateToggle(StaticMinApplication, leftSide);
            UIDynamicToggle tglStaticMaxOnly = CreateToggle(StaticMaxApplication, rightSide);
        }

        public void ShowMenuUI()
        {
            // sTATIC BUTTONs -- They don't go away --
            var btnM1 = CreateButton("Static Morphs", false);
            btnM1.button.onClick.AddListener(() =>
            {
                SwitchUI();
                ShowStartUI();
                tabStaticMorphUI();
            });

            var btnM2 = CreateButton("Centered Morphs", true);
            btnM2.button.onClick.AddListener(() =>
            {
                SwitchUI();
                ShowStartUI();
                CenteredMorphUI();

            });

            var btnM3 = CreateButton("Majora Morphs", false);
            btnM3.button.onClick.AddListener(() =>
            {
                SwitchUI();
                ShowStartUI();
                MajoraMorphUI();
            });

            var btnM4 = CreateButton("Minora Morphs", true);
            btnM4.button.onClick.AddListener(() =>
            {
                SwitchUI();
                ShowStartUI();
                MinoraMorphUI();
            });

            var btnM5 = CreateButton("Bender Morphs", false);
            btnM5.button.onClick.AddListener(() =>
            {
                SwitchUI();
                ShowStartUI();
                BendersMorphUI();
            });

            var btnM6 = CreateButton("Minora Asymmetrical Morphs", true);
            btnM6.button.onClick.AddListener(() =>
            {
                SwitchUI();
                ShowStartUI();
                MonsAndLabLengthMorphsUI();
            });

            var btnM7 = CreateButton("Randomization", true);
            btnM7.button.onClick.AddListener(() =>

            {
                SwitchUI();
                ShowStartUI();
                RandomizeMorphUI();

            }

            );
        }
        #endregion


        #region Morph Updates

        public void ApplyStaticValuesToMorphs()
        {
            //** STATIC **//
            try { AWW_PuffyMajora_1Morph.morphValue = IVal(1,AWW_PuffyMajora_1Range.val, AWW_PuffyMajora_1Range.val); } catch { }
            try { AWWLabiaMinSwell01Morph.morphValue = IVal(1,AWWLabiaMinSwell01Range.val, AWWLabiaMinSwell01Range.val); } catch { }
            try { VAMExtremeExpansionMorph.morphValue = IVal(1,VAMExtremeExpansion.val, VAMExtremeExpansion.val); } catch { }
            try { Genital_TightMorph.morphValue = IVal(1,Genital_Tight.val, Genital_Tight.val); } catch { }
            try { Genital_Area_RotationMorph.morphValue = IVal(1,Genital_Area_RotationRange.val, Genital_Area_RotationRange.val); } catch { }
            try { AWW_Clitoris_Front_Back.morphValue = IVal(1,AWW_Clitoris_Front_BackRange.val, AWW_Clitoris_Front_BackRange.val); } catch { }
            try { AWW_Clitoris_HoodBack.morphValue = IVal(1,AWW_Clitoris_HoodBackRange.val, AWW_Clitoris_HoodBackRange.val); } catch { }
            try { AWW_Clitoris_Size.morphValue = IVal(1,AWW_Clitoris_SizeRange.val, AWW_Clitoris_SizeRange.val); } catch { }
            try { AWW_Clitoris_HoodSize.morphValue = IVal(1,AWW_Clitoris_HoodSizeRange.val, AWW_Clitoris_HoodSizeRange.val); } catch { SuperController.LogError("XWTF"); }


            //private DAZMorph AWW_Anus_Z_Adjust_01Morph;
            //protected JSONStorableFloat AWW_Anus_Z_Adjust_01max;

            //private DAZMorph AWW_G2F_Flatter_GenMorph;
            //protected JSONStorableFloat AWW_G2F_Flatter_Genmax;

            //private DAZMorph AWW_HoodLength_301Morph;
            //protected JSONStorableFloat AWW_HoodLength_301max;

            //private DAZMorph AWW_HoodLength_302Morph;
            //protected JSONStorableFloat AWW_HoodLength_302max;

            //private DAZMorph AWW_LowerRegion_Z_01Morph;
            //protected JSONStorableFloat AWW_LowerRegion_Z_01max;

            //private DAZMorph AWW_LowerRegion_Z_02Morph;
            //protected JSONStorableFloat AWW_LowerRegion_Z_02max;

        }
        public void ApplyAsymetricalMinoraValues()
        {
            try { AWW_Left_Minora_Back_1_DownMorph.morphValue = IVal(1,flLMinB1D.val, flLMinB1D.val); } catch { }
            try { AWW_Left_Minora_Back_2_DownMorph.morphValue = IVal(1,flLMinB2D.val, flLMinB2D.val); } catch { }
            try { AWW_Left_Minora_Back_3_DownMorph.morphValue = IVal(1,flLMinB3D.val, flLMinB3D.val); } catch { }

            try { AWW_Right_Minora_Back_1_DownMorph.morphValue = IVal(1,flRMinB1D.val, flRMinB1D.val); } catch { }
            try { AWW_Right_Minora_Back_2_DownMorph.morphValue = IVal(1,flRMinB2D.val, flRMinB2D.val); } catch { }
            try { AWW_Right_Minora_Back_3_DownMorph.morphValue = IVal(1,flRMinB3D.val, flRMinB3D.val); } catch { }

            try { AWW_Left_Minora_Middle_1_DownMorph.morphValue = IVal(1,flLMinM1D.val, flLMinM1D.val); } catch { }
            try { AWW_Left_Minora_Middle_2_DownMorph.morphValue = IVal(1,flLMinM2D.val, flLMinM2D.val); } catch { }
            try { AWW_Left_Minora_Middle_3_DownMorph.morphValue = IVal(1,flLMinM3D.val, flLMinM3D.val); } catch { }
            try { AWW_Right_Minora_Middle_1_DownMorph.morphValue = IVal(1,flRMinM1D.val, flRMinM1D.val); } catch { }
            try { AWW_Right_Minora_Middle_2_DownMorph.morphValue = IVal(1,flRMinM2D.val, flRMinM2D.val); } catch { }
            try { AWW_Right_Minora_Middle_3_DownMorph.morphValue = IVal(1,flRMinM3D.val, flRMinM3D.val); } catch { }


            try { AWW_Left_Minora_Front_DownMorph.morphValue = IVal(1,flLMinFD.val, flLMinFD.val); } catch { }
            try { AWW_Right_Minora_Front_DownMorph.morphValue = IVal(1,flRMinFD.val, flRMinFD.val); } catch { }


        }

        public void ApplyBenderValuesToMorphs()
        {
            try { AWW_Bend_AN_01Morph.morphValue = NVal(1,AWW_Bend_AN_01max.val, AWW_Bend_AN_01max.val); } catch { }
            try { AWW_Bend_AN_02Morph.morphValue = NVal(1,AWW_Bend_AN_02max.val, AWW_Bend_AN_02max.val); } catch { }
            try { AWW_Bend_AN_03Morph.morphValue = NVal(1,AWW_Bend_AN_03max.val, AWW_Bend_AN_03max.val); } catch { }
            try { AWW_Bend_AN_04Morph.morphValue = NVal(1,AWW_Bend_AN_04max.val, AWW_Bend_AN_04max.val); } catch { }
            try { AWW_Bend_AN_05Morph.morphValue = NVal(1,AWW_Bend_AN_05max.val, AWW_Bend_AN_05max.val); } catch { }

            try { AWW_Bend_LC_01Morph.morphValue = NVal(1,AWW_Bend_LC_01max.val, AWW_Bend_LC_01max.val); } catch { }
            try { AWW_Bend_LC_02Morph.morphValue = NVal(1,AWW_Bend_LC_02max.val, AWW_Bend_LC_02max.val); } catch { }
            try { AWW_Bend_LC_03Morph.morphValue = NVal(1,AWW_Bend_LC_03max.val, AWW_Bend_LC_03max.val); } catch { }
            try { AWW_Bend_LC_04Morph.morphValue = NVal(1,AWW_Bend_LC_04max.val, AWW_Bend_LC_04max.val); } catch { }
            try { AWW_Bend_LC_05Morph.morphValue = NVal(1,AWW_Bend_LC_05max.val, AWW_Bend_LC_05max.val); } catch { }
            try { AWW_Bend_LC_06Morph.morphValue = NVal(1,AWW_Bend_LC_06max.val, AWW_Bend_LC_06max.val); } catch { }
            try { AWW_Bend_LC_07Morph.morphValue = NVal(1,AWW_Bend_LC_07max.val, AWW_Bend_LC_07max.val); } catch { }
            try { AWW_Bend_LC_08Morph.morphValue = NVal(1,AWW_Bend_LC_08max.val, AWW_Bend_LC_08max.val); } catch { }
            try { AWW_Bend_LC_09Morph.morphValue = NVal(1,AWW_Bend_LC_09max.val, AWW_Bend_LC_09max.val); } catch { }
            try { AWW_Anus_Z_Adjust_01Morph.morphValue = NVal(1, AWW_Anus_Z_Adjust_01max.val, AWW_Anus_Z_Adjust_01max.val); } catch { SuperController.LogError("XWTF"); }
            try { AWW_G2F_Flatter_GenMorph.morphValue = NVal(1, AWW_G2F_Flatter_Genmax.val, AWW_G2F_Flatter_Genmax.val); } catch { SuperController.LogError("XWTF"); }
            try { AWW_HoodLength_301Morph.morphValue = NVal(1, AWW_HoodLength_301max.val, AWW_HoodLength_301max.val); } catch { SuperController.LogError("XWTF"); }
            try { AWW_HoodLength_302Morph.morphValue = NVal(1, AWW_HoodLength_302max.val, AWW_HoodLength_302max.val); } catch { SuperController.LogError("XWTF"); }
            try { AWW_LowerRegion_Z_01Morph.morphValue = NVal(1, AWW_LowerRegion_Z_01max.val, AWW_LowerRegion_Z_01max.val); } catch { SuperController.LogError("XWTF"); }
            try { AWW_LowerRegion_Z_02Morph.morphValue = NVal(1, AWW_LowerRegion_Z_02max.val, AWW_LowerRegion_Z_02max.val); } catch { SuperController.LogError("XWTF"); }

        }
        public void ApplySpreadValuesToMorphs()
        {
            float spread = getSpreadDistance();


            //labiaMajoraMorph.morphValue = Mathf.Lerp(labiaMajoraMorph.morphValue, IVal(spread,labiaMajoraMorphChangeMin.val, labiaMajoraMorphChangeMax.val), Time.deltaTime * quicknessJSON.val);
            //lerpEnabled.val = true;

            if (lerpEnabled.val)
            {
                try { labiaMajoraMorph.morphValue = calcSmoothing(IVal(spread,labiaMajoraMorphChangeMin.val, labiaMajoraMorphChangeMax.val), labiaMajoraMorph.morphValue, 1f); } catch { }
                try { HoodModMorph.morphValue = IVal(spread,HoodModMorphChangeMin.val, HoodModMorphChangeMax.val); } catch { }
                try { HoodModMorph.morphValue = calcSmoothing(IVal(spread,HoodModMorphChangeMin.val, HoodModMorphChangeMax.val), HoodModMorph.morphValue, 1f); } catch { }
                try { LabMajRUpMorph.morphValue = calcSmoothing(IVal(spread, LabMajRUpMorphChangeMin.val, LabMajRUpMorphChangeMax.val), LabMajRUpMorph.morphValue, 4f); } catch { }
                try { LabMajLUpMorph.morphValue = calcSmoothing(IVal(spread, LabMajLUpMorphChangeMin.val, LabMajLUpMorphChangeMax.val), LabMajLUpMorph.morphValue, 4f); } catch { }

                try { AWW_Majora_LeftUpperTopMorph.morphValue = calcSmoothing(IVal(-spread, -AWW_Majora_LeftUpperTopMorphChangeMin.val, AWW_Majora_LeftUpperTopMorphChangeMax.val), AWW_Majora_LeftUpperTopMorph.morphValue, 0.9f); } catch { }
                try { AWW_Majora_RightUpperTopMorph.morphValue = calcSmoothing(IVal(-spread, -AWW_Majora_RightUpperTopMorphChangeMin.val, AWW_Majora_RightUpperTopMorphChangeMax.val), AWW_Majora_RightUpperTopMorph.morphValue, 0.9f); } catch { }

                try { LabMajRMidMorph.morphValue = calcSmoothing(IVal(spread,LabMajRMidMorphChangeMin.val, LabMajRMidMorphChangeMax.val), LabMajRMidMorph.morphValue,0.75f); } catch { }
                try { LabMajLMidMorph.morphValue = calcSmoothing(IVal(spread,LabMajLMidMorphChangeMin.val, LabMajLMidMorphChangeMax.val), LabMajLMidMorph.morphValue, 0.75f); } catch { }

                try { LabMajLLowMorph.morphValue = calcSmoothing(IVal(spread,LabMajLLowMorphChangeMin.val, LabMajLLowMorphChangeMax.val), LabMajLLowMorph.morphValue, 0.5f); } catch { }
                try { LabMajRLowMorph.morphValue = calcSmoothing(IVal(spread,LabMajRLowMorphChangeMin.val, LabMajRLowMorphChangeMax.val), LabMajRLowMorph.morphValue, 0.5f); } catch { }

                try { labiaMinoraMorph.morphValue = calcSmoothing(IVal(spread,labiaMinoraMorphChangeMin.val, labiaMinoraMorphChangeMax.val), labiaMinoraMorph.morphValue, 0.8f); } catch { }

                try { LabMinRUpMorph.morphValue = calcSmoothing(IVal(spread,LabMinRUpMorphChangeMin.val, LabMinRUpMorphChangeMax.val), LabMinRUpMorph.morphValue, 0.85f); } catch { }
                try { LabMinLUpMorph.morphValue = calcSmoothing(IVal(spread,LabMinLUpMorphChangeMin.val, LabMinLUpMorphChangeMax.val), LabMinLUpMorph.morphValue, 0.85f); } catch { }

                try { LabMinRMidMorph.morphValue = calcSmoothing(IVal(spread,LabMinRMidMorphChangeMin.val, LabMinRMidMorphChangeMax.val), LabMinRMidMorph.morphValue, 0.7f); } catch { }
                try { LabMinLMidMorph.morphValue = calcSmoothing(IVal(spread,LabMinLMidMorphChangeMin.val, LabMinLMidMorphChangeMax.val), LabMinLMidMorph.morphValue, 0.7f); } catch { }

                try { LabMinRLowMorph.morphValue = calcSmoothing(IVal(-spread,LabMinRLowMorphChangeMin.val, -LabMinRLowMorphChangeMax.val), LabMinRLowMorph.morphValue, 0.1f); } catch { }
                try { LabMinLLowMorph.morphValue = calcSmoothing(IVal(-spread,LabMinLLowMorphChangeMin.val, -LabMinLLowMorphChangeMax.val), LabMinLLowMorph.morphValue, 0.1f); } catch { }
                try { AWW_VagInternal_Size2.morphValue = calcSmoothing(IVal(spread,AWW_VagInternal_Size2ChangeMin.val, AWW_VagInternal_Size2ChangeMax.val), AWW_VagInternal_Size2.morphValue, 0.4f); } catch { }
                try { AWW_00_KegelMorph.morphValue = calcSmoothing(IVal(spread,-AWW_00_KegelMin.val, -AWW_00_KegelMax.val), AWW_00_KegelMorph.morphValue, 1f); } catch { }
                try { AWW_Anus_SpreadGape02Morph.morphValue = calcSmoothing(IVal(spread,AWW_Anus_SpreadGape02Min.val, AWW_Anus_SpreadGape02Max.val), AWW_Anus_SpreadGape02Morph.morphValue, 0.4f); } catch { }
                try { AWW_GenLabiaMajoraClosedAndSmoothMorph.morphValue = calcSmoothing(IVal(-spread,-AWW_GenLabiaMajoraClosedAndSmoothMorphMin.val, AWW_GenLabiaMajoraClosedAndSmoothMorphMax.val), AWW_GenLabiaMajoraClosedAndSmoothMorph.morphValue, 1f); } catch { }
            }
            else
            {

                try { labiaMajoraMorph.morphValue = IVal(spread,labiaMajoraMorphChangeMin.val, labiaMajoraMorphChangeMax.val); } catch { }
                try { HoodModMorph.morphValue = IVal(spread,HoodModMorphChangeMin.val, HoodModMorphChangeMax.val); } catch { }
                try { HoodModMorph.morphValue = IVal(spread,HoodModMorphChangeMin.val, HoodModMorphChangeMax.val); } catch { }
                try { LabMajRMidMorph.morphValue = IVal(spread,LabMajRMidMorphChangeMin.val, LabMajRMidMorphChangeMax.val); } catch { }
                try { LabMajLUpMorph.morphValue = IVal(spread,LabMajLUpMorphChangeMin.val, LabMajLUpMorphChangeMax.val); } catch { }
                try { LabMajLMidMorph.morphValue = IVal(spread,LabMajLMidMorphChangeMin.val, LabMajLMidMorphChangeMax.val); } catch { }
                try { LabMajLLowMorph.morphValue = IVal(spread,LabMajLLowMorphChangeMin.val, LabMajLLowMorphChangeMax.val); } catch { }
                try { LabMajRLowMorph.morphValue = IVal(spread,LabMajRLowMorphChangeMin.val, LabMajRLowMorphChangeMax.val); } catch { }
                try { LabMajRUpMorph.morphValue = IVal(spread,LabMajRUpMorphChangeMin.val, LabMajRUpMorphChangeMax.val); } catch { }
                try { labiaMinoraMorph.morphValue = IVal(spread,labiaMinoraMorphChangeMin.val, labiaMinoraMorphChangeMax.val); } catch { }
                try { AWW_Majora_LeftUpperTopMorph.morphValue = IVal(-spread,-AWW_Majora_LeftUpperTopMorphChangeMin.val, AWW_Majora_LeftUpperTopMorphChangeMax.val); } catch { }
                try { AWW_Majora_RightUpperTopMorph.morphValue = IVal(-spread,-AWW_Majora_RightUpperTopMorphChangeMin.val, AWW_Majora_RightUpperTopMorphChangeMax.val); } catch { }
                try { LabMinRUpMorph.morphValue = IVal(spread,LabMinRUpMorphChangeMin.val, LabMinRUpMorphChangeMax.val); } catch { }
                try { LabMinLUpMorph.morphValue = IVal(spread,LabMinLUpMorphChangeMin.val, LabMinLUpMorphChangeMax.val); } catch { }
                try { LabMinRMidMorph.morphValue = IVal(spread,LabMinRMidMorphChangeMin.val, LabMinRMidMorphChangeMax.val); } catch { }
                try { LabMinLMidMorph.morphValue = IVal(spread,LabMinLMidMorphChangeMin.val, LabMinLMidMorphChangeMax.val); } catch { }
                try { LabMinRLowMorph.morphValue = IVal(-spread,LabMinRLowMorphChangeMin.val, -LabMinRLowMorphChangeMax.val); } catch { }
                try { LabMinLLowMorph.morphValue = IVal(-spread,LabMinLLowMorphChangeMin.val, -LabMinLLowMorphChangeMax.val); } catch { }
                try { AWW_VagInternal_Size2.morphValue = IVal(spread,AWW_VagInternal_Size2ChangeMin.val, AWW_VagInternal_Size2ChangeMax.val); } catch { }
                try { AWW_00_KegelMorph.morphValue = IVal(spread,-AWW_00_KegelMin.val, -AWW_00_KegelMax.val); } catch { }
                try { AWW_Anus_SpreadGape02Morph.morphValue = IVal(spread,AWW_Anus_SpreadGape02Min.val, AWW_Anus_SpreadGape02Max.val); } catch { }
                try { AWW_GenLabiaMajoraClosedAndSmoothMorph.morphValue = IVal(-spread,-AWW_GenLabiaMajoraClosedAndSmoothMorphMin.val, AWW_GenLabiaMajoraClosedAndSmoothMorphMax.val); } catch { }
            }




        }

        private float IVal(float curSpread, float flmorphn2, float flmorphx2)
        {
            var delta = flmorphx2 - flmorphn2; var c = flmorphn2 - delta * 0f; var mFactor = delta * curSpread + c;
            if (CurveEnabled.val)
            {
                if ((delta * curSpread + c) < 0)
                {
                    float IValValueNeg = OverallIntensity.val * (mFactor * mFactor * -1f);
                    //SuperController.LogMessage(Time.deltaTime.ToString());
                    return IValValueNeg;
                }
                else
                {
                    float IValValuePos = OverallIntensity.val * (mFactor * mFactor);
                    return IValValuePos;
                }
            }

            else
            {
                float IValNoCurve = OverallIntensity.val * mFactor;
                return IValNoCurve;
            };

        }

        private float NVal(float curSpread, float flmorphn2, float flmorphx2)
        {
            var delta = flmorphx2 - flmorphn2; var c = flmorphn2 - delta * 0f; var mFactor = delta * curSpread + c;
            if (CurveEnabled.val)
            {
                if ((delta * curSpread + c) < 0)
                {
                    float IValValueNeg = mFactor * mFactor * -1f;
                    //SuperController.LogMessage(Time.deltaTime.ToString());
                    return IValValueNeg;
                }
                else
                {
                    float IValValuePos = mFactor * mFactor;
                    return IValValuePos;
                }
            }

            else
            {
                float IValNoCurve = mFactor;
                return IValNoCurve;
            };

        }

        private float CalcSVal(float curSpread, float flmorphn2, float flmorphx2)
        {
            var delta = flmorphx2 - flmorphn2; var c = flmorphn2 - delta * 0f; var mFactor = delta * curSpread + c;
            if (CurveEnabled.val)
            {
                if ((delta * curSpread + c) < 0)
                {
                    float IValValueNeg = OverallIntensity.val * (mFactor * mFactor * -1f);
                    //SuperController.LogMessage(Time.deltaTime.ToString());
                    return IValValueNeg;
                }
                else
                {
                    float IValValuePos = OverallIntensity.val * (mFactor * mFactor);
                    return IValValuePos;
                }
            }

            else
            {
                float IValNoCurve = OverallIntensity.val * mFactor;
                return IValNoCurve;
            };

        }
        public void ApplyMinValuesToMorphs()
        {
            try { HoodModMorph.morphValue = HoodModMorphChangeMin.val; } catch { }
            try { labiaMajoraMorph.morphValue = labiaMajoraMorphChangeMin.val; } catch { }
            try { LabMajRMidMorph.morphValue = LabMajRMidMorphChangeMin.val; } catch { }
            try { LabMajLUpMorph.morphValue = LabMajLUpMorphChangeMin.val; } catch { }
            try { LabMajLMidMorph.morphValue = LabMajLMidMorphChangeMin.val; } catch { }
            try { LabMajLLowMorph.morphValue = LabMajLLowMorphChangeMin.val; } catch { }
            try { LabMajRLowMorph.morphValue = LabMajRLowMorphChangeMin.val; } catch { }
            try { LabMajRUpMorph.morphValue = LabMajRUpMorphChangeMin.val; } catch { }
            try { labiaMinoraMorph.morphValue = labiaMinoraMorphChangeMin.val; } catch { }
            try { AWW_Majora_LeftUpperTopMorph.morphValue = -AWW_Majora_LeftUpperTopMorphChangeMin.val; } catch { }
            try { AWW_Majora_RightUpperTopMorph.morphValue = -AWW_Majora_RightUpperTopMorphChangeMin.val; } catch { }
            try { LabMinRUpMorph.morphValue = LabMinRUpMorphChangeMin.val; } catch { }
            try { LabMinLUpMorph.morphValue = LabMinLUpMorphChangeMin.val; } catch { }
            try { LabMinRMidMorph.morphValue = LabMinRMidMorphChangeMin.val; } catch { }
            try { LabMinLMidMorph.morphValue = LabMinLMidMorphChangeMin.val; } catch { }
            try { LabMinRLowMorph.morphValue = LabMinRLowMorphChangeMin.val; } catch { }
            try { LabMinLLowMorph.morphValue = LabMinLLowMorphChangeMin.val; } catch { }
            try { AWW_VagInternal_Size2.morphValue = AWW_VagInternal_Size2ChangeMin.val; } catch { }
            try { AWW_Clitoris_Front_Back.morphValue = AWW_Clitoris_Front_BackRange.val; } catch { }
            try { AWW_Clitoris_HoodBack.morphValue = AWW_Clitoris_HoodBackRange.val; } catch { }
            try { AWW_Clitoris_Size.morphValue = AWW_Clitoris_SizeRange.val; } catch { }
            try { AWW_Clitoris_HoodSize.morphValue = AWW_Clitoris_HoodSizeRange.val; } catch { }
            try { AWW_00_KegelMorph.morphValue = -AWW_00_KegelMin.val; } catch { }
            try { AWW_Anus_SpreadGape02Morph.morphValue = AWW_Anus_SpreadGape02Min.val; } catch { }
            try { AWW_GenLabiaMajoraClosedAndSmoothMorph.morphValue = -AWW_GenLabiaMajoraClosedAndSmoothMorphMin.val; } catch { }
            try { AWW_PuffyMajora_1Morph.morphValue = AWW_PuffyMajora_1Range.val; } catch { }
            try { AWWLabiaMinSwell01Morph.morphValue = AWWLabiaMinSwell01Range.val; } catch { }
        }
        public void ApplyMaxValuesToMorphs()
        {
            try { HoodModMorph.morphValue = HoodModMorphChangeMax.val; } catch { }
            try { labiaMajoraMorph.morphValue = labiaMajoraMorphChangeMax.val; } catch { }
            try { LabMajRMidMorph.morphValue = LabMajRMidMorphChangeMax.val; } catch { }
            try { LabMajLUpMorph.morphValue = LabMajLUpMorphChangeMax.val; } catch { }
            try { LabMajLMidMorph.morphValue = LabMajLMidMorphChangeMax.val; } catch { }
            try { LabMajLLowMorph.morphValue = LabMajLLowMorphChangeMax.val; } catch { }
            try { LabMajRLowMorph.morphValue = LabMajRLowMorphChangeMax.val; } catch { }
            try { LabMajRUpMorph.morphValue = LabMajRUpMorphChangeMax.val; } catch { }
            try { labiaMinoraMorph.morphValue = labiaMinoraMorphChangeMax.val; } catch { }
            try { AWW_Majora_LeftUpperTopMorph.morphValue = -AWW_Majora_LeftUpperTopMorphChangeMax.val; } catch { }
            try { AWW_Majora_RightUpperTopMorph.morphValue = -AWW_Majora_RightUpperTopMorphChangeMax.val; } catch { }
            try { LabMinRUpMorph.morphValue = LabMinRUpMorphChangeMax.val; } catch { }
            try { LabMinLUpMorph.morphValue = LabMinLUpMorphChangeMax.val; } catch { }
            try { LabMinRMidMorph.morphValue = LabMinRMidMorphChangeMax.val; } catch { }
            try { LabMinLMidMorph.morphValue = LabMinLMidMorphChangeMax.val; } catch { }
            try { LabMinRLowMorph.morphValue = LabMinRLowMorphChangeMax.val; } catch { }
            try { LabMinLLowMorph.morphValue = LabMinLLowMorphChangeMax.val; } catch { }
            try { AWW_VagInternal_Size2.morphValue = AWW_VagInternal_Size2ChangeMax.val; } catch { }
            try { AWW_Clitoris_Front_Back.morphValue = AWW_Clitoris_Front_BackRange.val; } catch { }
            try { AWW_Clitoris_HoodBack.morphValue = AWW_Clitoris_HoodBackRange.val; } catch { }
            try { AWW_Clitoris_Size.morphValue = AWW_Clitoris_SizeRange.val; } catch { }
            try { AWW_Clitoris_HoodSize.morphValue = AWW_Clitoris_HoodSizeRange.val; } catch { }
            try { AWW_00_KegelMorph.morphValue = -AWW_00_KegelMax.val; } catch { }
            try { AWW_Anus_SpreadGape02Morph.morphValue = AWW_Anus_SpreadGape02Max.val; } catch { }
            try { AWW_GenLabiaMajoraClosedAndSmoothMorph.morphValue = -AWW_GenLabiaMajoraClosedAndSmoothMorphMax.val; } catch { }
            try { AWW_PuffyMajora_1Morph.morphValue = AWW_PuffyMajora_1Range.val; } catch { }
            try { AWWLabiaMinSwell01Morph.morphValue = AWWLabiaMinSwell01Range.val; } catch { }
        }
        public void LRSyncApply()
        {

            if (LRSync.val)
            {
                LabMinRUpMorphChangeMin.val = LabMinLUpMorphChangeMin.val;
                LabMinRUpMorphChangeMax.val = LabMinLUpMorphChangeMax.val;
                LabMinRMidMorphChangeMin.val = LabMinLMidMorphChangeMin.val;
                LabMinRMidMorphChangeMax.val = LabMinLMidMorphChangeMax.val;
                LabMinRLowMorphChangeMin.val = LabMinLLowMorphChangeMin.val;
                LabMinRLowMorphChangeMax.val = LabMinLLowMorphChangeMax.val;

                AWW_Majora_RightUpperTopMorphChangeMin.val = AWW_Majora_LeftUpperTopMorphChangeMin.val;
                AWW_Majora_RightUpperTopMorphChangeMax.val = AWW_Majora_LeftUpperTopMorphChangeMax.val;

                LabMajRUpMorphChangeMin.val = LabMajLUpMorphChangeMin.val;
                LabMajRUpMorphChangeMax.val = LabMajLUpMorphChangeMax.val;

                LabMajRMidMorphChangeMin.val = LabMajLMidMorphChangeMin.val;
                LabMajRMidMorphChangeMax.val = LabMajLMidMorphChangeMax.val;



                LabMajRLowMorphChangeMin.val = LabMajLLowMorphChangeMin.val;
                LabMajRLowMorphChangeMax.val = LabMajLLowMorphChangeMax.val;

            }
        }
        public void zeroAllSettings()
        {
            quicknessJSON.val = 1f;
            isMultiPassEnabled.val = true;
            CurveEnabled.val = true;
            OverallIntensity.val = 1f;
            LabMinRUpMorphChangeMin.val = 0f;
            LabMinRUpMorphChangeMax.val = 0f;
            LabMinRMidMorphChangeMin.val = 0f;
            LabMinRMidMorphChangeMax.val = 0f;
            LabMinRLowMorphChangeMin.val = 0f;
            LabMinRLowMorphChangeMax.val = 0f;
            LabMinLUpMorphChangeMin.val = 0f;
            LabMinLUpMorphChangeMax.val = 0f;
            LabMinLMidMorphChangeMin.val = 0f;
            LabMinLMidMorphChangeMax.val = 0f;
            LabMinLLowMorphChangeMin.val = 0f;
            LabMinLLowMorphChangeMax.val = 0f;
            LabMajRUpMorphChangeMin.val = 0f;
            LabMajRUpMorphChangeMax.val = 0f;
            LabMajRMidMorphChangeMin.val = 0f;
            LabMajRMidMorphChangeMax.val = 0f;
            LabMajRLowMorphChangeMin.val = 0f;
            LabMajRLowMorphChangeMax.val = 0f;
            LabMajLUpMorphChangeMin.val = 0f;
            LabMajLUpMorphChangeMax.val = 0f;
            LabMajLMidMorphChangeMin.val = 0f;
            LabMajLMidMorphChangeMax.val = 0f;
            LabMajLLowMorphChangeMin.val = 0f;
            LabMajLLowMorphChangeMax.val = 0f;
            labiaMinoraMorphChangeMin.val = 0f;
            labiaMinoraMorphChangeMax.val = 0f;
            labiaMajoraMorphChangeMin.val = 0f;
            labiaMajoraMorphChangeMax.val = 0f;
            HoodModMorphChangeMin.val = 0f;
            HoodModMorphChangeMax.val = 0f;
            AWW_VagInternal_Size2ChangeMin.val = 0f;
            AWW_VagInternal_Size2ChangeMax.val = 0f;
            AWW_PuffyMajora_1Range.val = 0f;
            AWW_Majora_RightUpperTopMorphChangeMin.val = 0f;
            AWW_Majora_RightUpperTopMorphChangeMax.val = 0f;
            AWW_Majora_LeftUpperTopMorphChangeMin.val = 0f;
            AWW_Majora_LeftUpperTopMorphChangeMax.val = 0f;
            AWW_GenLabiaMajoraClosedAndSmoothMorphMin.val = 0f;
            AWW_GenLabiaMajoraClosedAndSmoothMorphMax.val = 0f;
            AWW_Clitoris_SizeRange.val = 0f;
            AWW_Clitoris_SizeRange.val = 0f;
            AWW_Clitoris_HoodSizeRange.val = 0f;
            AWW_Clitoris_HoodSizeRange.val = 0f;
            AWW_Clitoris_HoodBackRange.val = 0f;
            AWW_Clitoris_HoodBackRange.val = 0f;
            AWW_Clitoris_Front_BackRange.val = 0f;
            AWW_Clitoris_Front_BackRange.val = 0f;
            AWW_Anus_SpreadGape02Min.val = 0f;
            AWW_Anus_SpreadGape02Max.val = 0f;
            AWW_00_KegelMin.val = 0f;
            AWW_00_KegelMax.val = 0f;
            AWWLabiaMinSwell01Range.val = 0f;
            AWW_Anus_SpreadGape02Min.val = 0f;
            AWW_Anus_SpreadGape02Max.val = 0f;
            AWW_GenLabiaMajoraClosedAndSmoothMorphMin.val = 0f;
            AWW_GenLabiaMajoraClosedAndSmoothMorphMax.val = 0f;
            AWW_PuffyMajora_1Range.val = 0f;
            AWWLabiaMinSwell01Range.val = 0f;
            VAMExtremeExpansion.val = 0f;
            Genital_Tight.val = 0f;
            Genital_Area_RotationRange.val = 0f;
            flLMinB1D.val = 0f;
            flLMinB2D.val = 0f;
            flLMinB3D.val = 0f;
            flRMinB1D.val = 0f;
            flRMinB2D.val = 0f;
            flRMinB3D.val = 0f;
            flLMinFD.val = 0f;
            flRMinFD.val = 0f;
            flLMinM1D.val = 0f;
            flLMinM2D.val = 0f;
            flLMinM3D.val = 0f;
            flRMinM1D.val = 0f;
            flRMinM2D.val = 0f;
            flRMinM3D.val = 0f;
            AWW_Bend_AN_01min.val = 0f;
            AWW_Bend_AN_01max.val = 0f;
            AWW_Bend_AN_02min.val = 0f;
            AWW_Bend_AN_02max.val = 0f;
            AWW_Bend_AN_03min.val = 0f;
            AWW_Bend_AN_03max.val = 0f;
            AWW_Bend_AN_04min.val = 0f;
            AWW_Bend_AN_04max.val = 0f;
            AWW_Bend_AN_05min.val = 0f;
            AWW_Bend_AN_05max.val = 0f;
            AWW_Bend_LC_01min.val = 0f;
            AWW_Bend_LC_01max.val = 0f;
            AWW_Bend_LC_02min.val = 0f;
            AWW_Bend_LC_02max.val = 0f;
            AWW_Bend_LC_03min.val = 0f;
            AWW_Bend_LC_03max.val = 0f;
            AWW_Bend_LC_04min.val = 0f;
            AWW_Bend_LC_04max.val = 0f;
            AWW_Bend_LC_05min.val = 0f;
            AWW_Bend_LC_05max.val = 0f;
            AWW_Bend_LC_06min.val = 0f;
            AWW_Bend_LC_06max.val = 0f;
            AWW_Bend_LC_07min.val = 0f;
            AWW_Bend_LC_07max.val = 0f;
            AWW_Bend_LC_08min.val = 0f;
            AWW_Bend_LC_08max.val = 0f;
            AWW_Bend_LC_09min.val = 0f;
            AWW_Bend_LC_09max.val = 0f;

            AWW_Anus_Z_Adjust_01max.val = 0f;
            AWW_G2F_Flatter_Genmax.val = 0f;
            AWW_HoodLength_301max.val = 0f;
            AWW_HoodLength_302max.val = 0f;
            AWW_LowerRegion_Z_01max.val = 0f;
            AWW_LowerRegion_Z_02max.val = 0f;


        }
        public void ApplyDefaults()
        {
            RestoreAllFromDefaults();
        }

        #endregion

        #region Math Shit Here





        private float getSpreadDistance()
        {
            Vector3 cP1 = torso.followWhenOff.position;
            Vector3 lkP1 = lK1.followWhenOff.position;
            Vector3 rP1 = rK1.followWhenOff.position;
            Vector3 wayz = lkP1 - rP1;
            float rK1tolk1 = wayz.magnitude;
            wayz = lkP1 - cP1;
            float lKP1toCP1 = wayz.magnitude;
            wayz = rP1 - cP1;
            float rk1tocP1 = wayz.magnitude;
            float distance = rK1tolk1 - (Mathf.Abs(lKP1toCP1 - rk1tocP1) * 2);
            return distance;

        }
        private float getSpreadRight()
        {
            Vector3 cP1 = torso.followWhenOff.position;
            Vector3 rP1 = rK1.followWhenOff.position;
            Vector3 lP1 = lT1.followWhenOff.position;
            Vector3 wayz;

            wayz = cP1 - rP1; float rP1tolT1 = wayz.magnitude; wayz = lP1 - cP1; float lT1tocP1 = wayz.magnitude;wayz = rP1 - cP1; float rk1tocP1 = wayz.magnitude;float distance = rP1tolT1 - (Mathf.Abs(lT1tocP1 - rk1tocP1) - 0.5f);
            poop++;

            if (DebugBuild)
            {
                SuperController.LogMessage(lT1tocP1.ToString() + " " + rk1tocP1.ToString() + " " + rP1tolT1.ToString());
                SuperController.LogMessage(distance.ToString());
                poop = 0;
                
            }

            return distance;

        }
        private float getSpreadLeft()
        {
            Vector3 cP1 = torso.followWhenOff.position;
            Vector3 lkP1 = lK1.followWhenOff.position;
            Vector3 rP1 = rK1.followWhenOff.position;
            Vector3 rtP1 = rT1.followWhenOff.position;
            Vector3 lP1 = lT1.followWhenOff.position;

            Vector3 wayz = lkP1 - rP1;
            float rK1tolk1 = wayz.magnitude;
            wayz = lkP1 - cP1;
            float lKP1toCP1 = wayz.magnitude;
            wayz = rP1 - cP1;
            float rk1tocP1 = wayz.magnitude;
            float distance = rK1tolk1 - (Mathf.Abs(lKP1toCP1 - rk1tocP1) * 2);
            return distance;

        }
        private float calcSmoothing(float spread, float curValue, float modifier)
        {

            try
            {
                if (lerpEnabled.val)
                {
                    float LerpT = 0f;
                    LerpT = Mathf.Lerp(curValue, spread, Time.deltaTime * quicknessJSON.val * modifier);
                    return LerpT;
                }
                else
                {


                    return 0f;

                }
            }
            catch
            { return 1f; }

        }
        #endregion
        private void MapDazMorphs()
        {
            try
            {

                if (containingAtom.type != "Person")
                {
                    SuperController.LogError($"Plugin for use with 'Person' atom, not '{containingAtom.type}'");
                    return;
                }
                pluginLabelJSON.val = "MultiPass - AWWalker version:" + gmpversion;
                JSONStorable js = containingAtom.GetStorableByID("geometry");

                if (js != null)
                {
                    DAZCharacterSelector dcs = js as DAZCharacterSelector;
                    GenerateDAZMorphsControlUI morphUI = dcs.morphsControlUI;
                    if (morphUI != null)
                    {
                        #region Register Morphs (Uncatted)
                        try
                        {
                            AWW_VagInternal_Size2 = morphUI.GetMorphByUid("AWWalker.AWW_GenMorphResources.9:/Custom/Atom/Person/Morphs/female_genitalia/data/3feetwolf/New Genitalia For Victoria 6/Genitalia-default/Morphs/AWWALKER/AWWalker_GEN_Morphs1.0/AWW_VagInternal_Size2.vmi");
                            if (AWW_VagInternal_Size2 == null)
                            {
                                SuperController.LogError("Did you download all dependencies? Couldn't find morph 'AWW_VagInternal_Size2'");
                                AWW_VagInternal_Size2 = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };
                        try
                        {
                            AWW_PuffyMajora_1Morph = morphUI.GetMorphByUid("AWWalker.AWW_GenMorphResources.9:/Custom/Atom/Person/Morphs/female_genitalia/data/3feetwolf/New Genitalia For Victoria 6/Genitalia-default/Morphs/AWWALKER/AWWalker_GEN_Morphs1.0/AWW_PuffyMajora_1.vmi");
                            if (AWW_PuffyMajora_1Morph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? Couldn't find morph 'AWW_PuffyMajora_1Morph'");
                                AWW_PuffyMajora_1Morph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };
                        try
                        {
                            AWW_GenLabiaMajoraClosedAndSmoothMorph = morphUI.GetMorphByUid("AWWalker.AWW_GenMorphResources_Pak2.2:/Custom/Atom/Person/Morphs/female_genitalia/AWWalker/AWWalker_GEN_Morphs3.0/g2fGen-LabiaMajoraClosedAndSmooth.vmi");
                            if (AWW_GenLabiaMajoraClosedAndSmoothMorph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? Couldn't find morph 'AWW_GenLabiaMajoraClosedAndSmoothMorph'");
                                AWW_GenLabiaMajoraClosedAndSmoothMorph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };
                        try
                        {
                            AWW_Clitoris_Size = morphUI.GetMorphByUid("AWWalker.AWW_GenMorphResources.9:/Custom/Atom/Person/Morphs/female_genitalia/data/3feetwolf/New Genitalia For Victoria 6/Genitalia-default/Morphs/AWWALKER/AWWalker_GEN_Morphs1.0/AWW_Clitoris_Size.vmi");
                            if (AWW_Clitoris_Size == null)
                            {
                                SuperController.LogError("Did you download all dependencies? Couldn't find morph ' AWW_Clitoris_Size'");
                                AWW_Clitoris_Size = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };
                        try
                        {
                            AWW_Clitoris_HoodSize = morphUI.GetMorphByUid("AWWalker.AWW_GenMorphResources.9:/Custom/Atom/Person/Morphs/female_genitalia/data/3feetwolf/New Genitalia For Victoria 6/Genitalia-default/Morphs/AWWALKER/AWWalker_GEN_Morphs1.0/AWW_Clitoris_HoodSize.vmi");
                            if (AWW_Clitoris_HoodSize == null)
                            {
                                SuperController.LogError("Did you download all dependencies? Couldn't find morph ' AWW_Clitoris_HoodSize'");
                                AWW_Clitoris_HoodSize = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };
                        try
                        {
                            AWW_Clitoris_HoodBack = morphUI.GetMorphByUid("AWWalker.AWW_GenMorphResources.9:/Custom/Atom/Person/Morphs/female_genitalia/data/3feetwolf/New Genitalia For Victoria 6/Genitalia-default/Morphs/AWWALKER/AWWalker_GEN_Morphs1.0/AWW_Clitoris_HoodBack.vmi");
                            if (AWW_Clitoris_HoodBack == null)
                            {
                                SuperController.LogError("Did you download all dependencies? Couldn't find morph ' AWW_Clitoris_HoodBack'");
                                AWW_Clitoris_HoodBack = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };
                        try
                        {
                            AWW_Clitoris_Front_Back = morphUI.GetMorphByUid("AWWalker.AWW_GenMorphResources.9:/Custom/Atom/Person/Morphs/female_genitalia/data/3feetwolf/New Genitalia For Victoria 6/Genitalia-default/Morphs/AWWALKER/AWWalker_GEN_Morphs1.0/AWW_Clitoris_Front_Back.vmi");
                            if (AWW_Clitoris_Front_Back == null)
                            {
                                SuperController.LogError("Did you download all dependencies? Couldn't find morph ' AWW_Clitoris_Front_Back'");
                                AWW_Clitoris_Front_Back = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };
                        try
                        {
                            AWW_Majora_LeftUpperTopMorph = morphUI.GetMorphByUid("AWWalker.AWW_GenMorphResources.9:/Custom/Atom/Person/Morphs/female_genitalia/data/3feetwolf/New Genitalia For Victoria 6/Genitalia-default/Morphs/AWWALKER/AWWalker_GEN_Morphs1.0/AWW_Majora_LeftUpperTop.vmi");
                            if (AWW_Majora_LeftUpperTopMorph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? Couldn't find morph 'AWW_Majora_LeftUpperTop'");
                                AWW_Majora_LeftUpperTopMorph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };
                        try
                        {
                            LabMajRUpMorph = morphUI.GetMorphByUid("AWWalker.AWW_GenMorphResources.9:/Custom/Atom/Person/Morphs/female_genitalia/data/3feetwolf/New Genitalia For Victoria 6/Genitalia-default/Morphs/AWWALKER/AWWalker_GEN_Morphs1.0/Labia majora-spread-RUp.vmi");
                            if (LabMajRUpMorph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? Couldn't find morph 'Labia majora-spread-RUp'");
                                LabMajRUpMorph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };
                        try
                        {
                            AWW_Majora_RightUpperTopMorph = morphUI.GetMorphByUid("AWWalker.AWW_GenMorphResources.9:/Custom/Atom/Person/Morphs/female_genitalia/data/3feetwolf/New Genitalia For Victoria 6/Genitalia-default/Morphs/AWWALKER/AWWalker_GEN_Morphs1.0/AWW_Majora_RightUpperTop.vmi");
                            if (AWW_Majora_RightUpperTopMorph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? Couldn't find morph 'AWW_Majora_RightUpperTop'");
                                AWW_Majora_RightUpperTopMorph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };
                        try
                        {
                            labiaMinoraMorph = morphUI.GetMorphByUid("AWWalker.AWW_GenMorphResources.9:/Custom/Atom/Person/Morphs/female_genitalia/data/3feetwolf/New Genitalia For Victoria 6/Genitalia-default/Morphs/AWWALKER/AWWalker_GEN_Morphs1.0/Labia minora-size.vmi");
                            if (labiaMinoraMorph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? Couldn't find morph 'Labia minora-size'");
                                labiaMinoraMorph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };
                        try
                        {
                            HoodModMorph = morphUI.GetMorphByUid("AWWalker.AWW_GenMorphResources.9:/Custom/Atom/Person/Morphs/female_genitalia/data/3feetwolf/New Genitalia For Victoria 6/Genitalia-default/Morphs/AWWALKER/AWWalker_GEN_Morphs1.0/HoodMod.vmi");
                            if (HoodModMorph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? Couldn't find morph 'HoodMod'");
                                HoodModMorph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };
                        try
                        {
                            labiaMajoraMorph = morphUI.GetMorphByUid("AWWalker.AWW_GenMorphResources.9:/Custom/Atom/Person/Morphs/female_genitalia/data/3feetwolf/New Genitalia For Victoria 6/Genitalia-default/Morphs/AWWALKER/AWWalker_GEN_Morphs1.0/Labia majora-relaxation.vmi");
                            if (labiaMajoraMorph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? Couldn't find morph 'Labia majora-relaxation'");
                                labiaMajoraMorph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };
                        try
                        {
                            LabMajRMidMorph = morphUI.GetMorphByDisplayName("Labia majora-spread-RMid");
                            if (LabMajRMidMorph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? Couldn't find morph 'Labia majora-spread-RMid'");
                                LabMajRMidMorph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };
                        try
                        {
                            LabMajLUpMorph = morphUI.GetMorphByUid("AWWalker.AWW_GenMorphResources.9:/Custom/Atom/Person/Morphs/female_genitalia/data/3feetwolf/New Genitalia For Victoria 6/Genitalia-default/Morphs/AWWALKER/AWWalker_GEN_Morphs1.0/Labia majora-spread-LUp.vmi");
                            if (LabMajLUpMorph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? Couldn't find morph 'Labia majora-spread-LUp'");
                                LabMajLUpMorph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };
                        try
                        {
                            LabMajLMidMorph = morphUI.GetMorphByUid("AWWalker.AWW_GenMorphResources.9:/Custom/Atom/Person/Morphs/female_genitalia/data/3feetwolf/New Genitalia For Victoria 6/Genitalia-default/Morphs/AWWALKER/AWWalker_GEN_Morphs1.0/Labia majora-spread-LMid.vmi");
                            if (LabMajLMidMorph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? Couldn't find morph 'Labia majora-spread-LMid'");
                                LabMajLMidMorph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };
                        try
                        {
                            LabMajLLowMorph = morphUI.GetMorphByUid("AWWalker.AWW_GenMorphResources.9:/Custom/Atom/Person/Morphs/female_genitalia/data/3feetwolf/New Genitalia For Victoria 6/Genitalia-default/Morphs/AWWALKER/AWWalker_GEN_Morphs1.0/Labia majora-spread-LLow.vmi");
                            if (LabMajLLowMorph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? Couldn't find morph 'Labia majora-spread-LLow'");
                                LabMajLLowMorph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };
                        try
                        {
                            LabMinRMidMorph = morphUI.GetMorphByUid("AWWalker.AWW_GenMorphResources.9:/Custom/Atom/Person/Morphs/female_genitalia/data/3feetwolf/New Genitalia For Victoria 6/Genitalia-default/Morphs/AWWALKER/AWWalker_GEN_Morphs1.0/Labia minora-spread-RMid.vmi");
                            if (LabMinRMidMorph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? Couldn't find morph 'Labia minora-spread-RMid'");
                                LabMinRMidMorph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };
                        try
                        {                            //(* needsStore fix*)
                            LabMinRUpMorph = morphUI.GetMorphByUid("AWWalker.AWW_GenMorphResources.9:/Custom/Atom/Person/Morphs/female_genitalia/data/3feetwolf/New Genitalia For Victoria 6/Genitalia-default/Morphs/AWWALKER/AWWalker_GEN_Morphs1.0/Labia minora-spread-RUp.vmi");
                            if (LabMinRUpMorph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? Couldn't find morph 'Labia minora-spread-RUp'");
                                LabMinRUpMorph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };
                        try
                        {
                            LabMinLLowMorph = morphUI.GetMorphByUid("AWWalker.AWW_GenMorphResources.9:/Custom/Atom/Person/Morphs/female_genitalia/data/3feetwolf/New Genitalia For Victoria 6/Genitalia-default/Morphs/AWWALKER/AWWalker_GEN_Morphs1.0/Labia minora-spread-LLow.vmi");
                            if (LabMinLLowMorph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? Couldn't find morph 'Labia minora-spread-LLow'");
                                LabMinLLowMorph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };
                        try
                        {
                            LabMinLUpMorph = morphUI.GetMorphByUid("AWWalker.AWW_GenMorphResources.9:/Custom/Atom/Person/Morphs/female_genitalia/data/3feetwolf/New Genitalia For Victoria 6/Genitalia-default/Morphs/AWWALKER/AWWalker_GEN_Morphs1.0/Labia minora-spread-LUp.vmi");
                            if (LabMinLUpMorph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? Couldn't find morph 'Labia minora-spread-LUp'");
                                LabMinLUpMorph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };
                        try
                        {
                            LabMajRLowMorph = morphUI.GetMorphByUid("AWWalker.AWW_GenMorphResources.9:/Custom/Atom/Person/Morphs/female_genitalia/data/3feetwolf/New Genitalia For Victoria 6/Genitalia-default/Morphs/AWWALKER/AWWalker_GEN_Morphs1.0/Labia majora-spread-RLow.vmi");
                            if (LabMajRLowMorph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? Couldn't find morph 'Labia majora-spread-RLow'");
                                LabMajRLowMorph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };
                        try
                        {
                            LabMinRLowMorph = morphUI.GetMorphByUid("AWWalker.AWW_GenMorphResources.9:/Custom/Atom/Person/Morphs/female_genitalia/data/3feetwolf/New Genitalia For Victoria 6/Genitalia-default/Morphs/AWWALKER/AWWalker_GEN_Morphs1.0/Labia minora-spread-RLow.vmi");
                            if (LabMinRLowMorph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? Couldn't find morph 'Labia minora-spread-RLow'");
                                LabMinRLowMorph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };

                        try
                        {
                            LabMinLMidMorph = morphUI.GetMorphByUid("AWWalker.AWW_GenMorphResources.9:/Custom/Atom/Person/Morphs/female_genitalia/data/3feetwolf/New Genitalia For Victoria 6/Genitalia-default/Morphs/AWWALKER/AWWalker_GEN_Morphs1.0/Labia minora-spread-LMid.vmi");
                            if (LabMinLMidMorph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? Couldn't find morph 'Labia minora-spread-LMid'");
                                LabMinLMidMorph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };


                        try
                        {
                            AWWLabiaMinSwell01Morph = morphUI.GetMorphByUid("AWWalker.AWW_GenMorphResources_Pak2.2:/Custom/Atom/Person/Morphs/female_genitalia/AWWalker/AWWalker_GEN_Morphs3.0/AWW-LabiaMin-Swell_01.vmi");
                            if (AWWLabiaMinSwell01Morph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? Couldn't find morph 'AWW-LabiaMin-Swell_01'");
                                AWWLabiaMinSwell01Morph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };
                        #endregion
                        #region Register Labia Minora Asymmetrical Morphs
                        try
                        {
                            AWW_Left_Minora_Back_1_DownMorph = morphUI.GetMorphByUid("AWWalker.AWWalker_GEN_Morphs_Minora.1:/Custom/Atom/Person/Morphs/female_genitalia/AWWalker/AWWalker_GEN_Morphs_Minora/AWW_Left_Minora_Back_1_Down.vmi");
                            if (AWW_Left_Minora_Back_1_DownMorph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? (AWWalker.AWWalker_GEN_Morphs_Minora.1) Couldn't find morph 'AWW_Left_Minora_Back_1_DownMorph'");
                                AWW_Left_Minora_Back_1_DownMorph = morphUI.GetMorphByUid("Left Pinky Toe Bend");
                            }
                        }
                        catch { };

                        try
                        {
                            AWW_Left_Minora_Back_2_DownMorph = morphUI.GetMorphByUid("AWWalker.AWWalker_GEN_Morphs_Minora.1:/Custom/Atom/Person/Morphs/female_genitalia/AWWalker/AWWalker_GEN_Morphs_Minora/AWW_Left_Minora_Back_2_Down.vmi");
                            if (AWW_Left_Minora_Back_2_DownMorph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? (AWWalker.AWWalker_GEN_Morphs_Minora.1)Couldn't find morph 'AWW_Left_Minora_Back_2_DownMorph'");
                                AWW_Left_Minora_Back_2_DownMorph = morphUI.GetMorphByUid("Left Pinky Toe Bend");
                            }
                        }
                        catch { };

                        try
                        {
                            AWW_Left_Minora_Back_3_DownMorph = morphUI.GetMorphByUid("AWWalker.AWWalker_GEN_Morphs_Minora.1:/Custom/Atom/Person/Morphs/female_genitalia/AWWalker/AWWalker_GEN_Morphs_Minora/AWW_Left_Minora_Back_3_Down.vmi");
                            if (AWW_Left_Minora_Back_3_DownMorph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? (AWWalker.AWWalker_GEN_Morphs_Minora.1)Couldn't find morph 'AWW_Left_Minora_Back_3_DownMorph'");
                                AWW_Left_Minora_Back_3_DownMorph = morphUI.GetMorphByUid("Left Pinky Toe Bend");
                            }
                        }
                        catch { };
                        try
                        {
                            AWW_Right_Minora_Back_1_DownMorph = morphUI.GetMorphByUid("AWWalker.AWWalker_GEN_Morphs_Minora.1:/Custom/Atom/Person/Morphs/female_genitalia/AWWalker/AWWalker_GEN_Morphs_Minora/AWW_Right_Minora_Back_1_Down.vmi");
                            if (AWW_Right_Minora_Back_1_DownMorph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? (AWWalker.AWWalker_GEN_Morphs_Minora.1)Couldn't find morph 'AWW_Right_Minora_Back_1_DownMorph'");
                                AWW_Right_Minora_Back_1_DownMorph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };

                        try
                        {
                            AWW_Right_Minora_Back_2_DownMorph = morphUI.GetMorphByUid("AWWalker.AWWalker_GEN_Morphs_Minora.1:/Custom/Atom/Person/Morphs/female_genitalia/AWWalker/AWWalker_GEN_Morphs_Minora/AWW_Right_Minora_Back_2_Down.vmi");
                            if (AWW_Right_Minora_Back_2_DownMorph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? (AWWalker.AWWalker_GEN_Morphs_Minora.1)Couldn't find morph 'AWW_Right_Minora_Back_2_DownMorph'");
                                AWW_Right_Minora_Back_2_DownMorph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };

                        try
                        {
                            AWW_Right_Minora_Back_3_DownMorph = morphUI.GetMorphByUid("AWWalker.AWWalker_GEN_Morphs_Minora.1:/Custom/Atom/Person/Morphs/female_genitalia/AWWalker/AWWalker_GEN_Morphs_Minora/AWW_Right_Minora_Back_3_Down.vmi");
                            if (AWW_Right_Minora_Back_3_DownMorph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? (AWWalker.AWWalker_GEN_Morphs_Minora.1)Couldn't find morph 'AWW_Right_Minora_Back_3_DownMorph'");
                                AWW_Right_Minora_Back_3_DownMorph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }

                        catch { };





                        try
                        {
                            AWW_Left_Minora_Middle_1_DownMorph = morphUI.GetMorphByUid("AWWalker.AWWalker_GEN_Morphs_Minora.1:/Custom/Atom/Person/Morphs/female_genitalia/AWWalker/AWWalker_GEN_Morphs_Minora/AWW_Left_Minora_Middle_1_Down.vmi");
                            if (AWW_Left_Minora_Middle_1_DownMorph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? (AWWalker.AWWalker_GEN_Morphs_Minora.1)Couldn't find morph 'AWW_Left_Minora_Middle_1_DownMorph'");
                                AWW_Left_Minora_Middle_1_DownMorph = morphUI.GetMorphByUid("Left Pinky Toe Bend");
                            }
                        }
                        catch { };

                        try
                        {
                            AWW_Left_Minora_Middle_2_DownMorph = morphUI.GetMorphByUid("AWWalker.AWWalker_GEN_Morphs_Minora.1:/Custom/Atom/Person/Morphs/female_genitalia/AWWalker/AWWalker_GEN_Morphs_Minora/AWW_Left_Minora_Middle_2_Down.vmi");
                            if (AWW_Left_Minora_Middle_2_DownMorph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? (AWWalker.AWWalker_GEN_Morphs_Minora.1)Couldn't find morph 'AWW_Left_Minora_Middle_2_DownMorph'");
                                AWW_Left_Minora_Middle_2_DownMorph = morphUI.GetMorphByUid("Left Pinky Toe Bend");
                            }
                        }
                        catch { };

                        try
                        {
                            AWW_Left_Minora_Middle_3_DownMorph = morphUI.GetMorphByUid("AWWalker.AWWalker_GEN_Morphs_Minora.1:/Custom/Atom/Person/Morphs/female_genitalia/AWWalker/AWWalker_GEN_Morphs_Minora/AWW_Left_Minora_Middle_3_Down.vmi");
                            if (AWW_Left_Minora_Middle_3_DownMorph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? (AWWalker.AWWalker_GEN_Morphs_Minora.1)Couldn't find morph 'AWW_Left_Minora_Middle_3_DownMorph'");
                                AWW_Left_Minora_Middle_3_DownMorph = morphUI.GetMorphByUid("Left Pinky Toe Bend");
                            }
                        }
                        catch { };
                        try
                        {
                            AWW_Right_Minora_Middle_1_DownMorph = morphUI.GetMorphByUid("AWWalker.AWWalker_GEN_Morphs_Minora.1:/Custom/Atom/Person/Morphs/female_genitalia/AWWalker/AWWalker_GEN_Morphs_Minora/AWW_Right_Minora_Middle_1_Down.vmi");
                            if (AWW_Right_Minora_Middle_1_DownMorph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? (AWWalker.AWWalker_GEN_Morphs_Minora.1)Couldn't find morph 'AWW_Right_Minora_Middle_1_DownMorph'");
                                AWW_Right_Minora_Middle_1_DownMorph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };

                        try
                        {
                            AWW_Right_Minora_Middle_2_DownMorph = morphUI.GetMorphByUid("AWWalker.AWWalker_GEN_Morphs_Minora.1:/Custom/Atom/Person/Morphs/female_genitalia/AWWalker/AWWalker_GEN_Morphs_Minora/AWW_Right_Minora_Middle_2_Down.vmi");
                            if (AWW_Right_Minora_Middle_2_DownMorph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? (AWWalker.AWWalker_GEN_Morphs_Minora.1)Couldn't find morph 'AWW_Right_Minora_Middle_2_DownMorph'");
                                AWW_Right_Minora_Middle_2_DownMorph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };

                        try
                        {
                            AWW_Right_Minora_Middle_3_DownMorph = morphUI.GetMorphByUid("AWWalker.AWWalker_GEN_Morphs_Minora.1:/Custom/Atom/Person/Morphs/female_genitalia/AWWalker/AWWalker_GEN_Morphs_Minora/AWW_Right_Minora_Middle_3_Down.vmi");
                            if (AWW_Right_Minora_Middle_3_DownMorph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? (AWWalker.AWWalker_GEN_Morphs_Minora.1)Couldn't find morph 'AWW_Right_Minora_Middle_3_DownMorph'");
                                AWW_Right_Minora_Middle_3_DownMorph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };

                        try
                        {
                            AWW_Right_Minora_Front_DownMorph = morphUI.GetMorphByUid("AWWalker.AWWalker_GEN_Morphs_Minora.1:/Custom/Atom/Person/Morphs/female_genitalia/AWWalker/AWWalker_GEN_Morphs_Minora/AWW_Right_Minora_Front_Down.vmi");
                            if (AWW_Right_Minora_Front_DownMorph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? (AWWalker.AWWalker_GEN_Morphs_Minora.1)Couldn't find morph 'AWW_Right_Minora_Front_DownMorph'");
                                AWW_Right_Minora_Front_DownMorph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };


                        try
                        {
                            AWW_Left_Minora_Front_DownMorph = morphUI.GetMorphByUid("AWWalker.AWWalker_GEN_Morphs_Minora.1:/Custom/Atom/Person/Morphs/female_genitalia/AWWalker/AWWalker_GEN_Morphs_Minora/AWW_Left_Minora_Front_Down.vmi");
                            if (AWW_Left_Minora_Front_DownMorph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? (AWWalker.AWWalker_GEN_Morphs_Minora.1)Couldn't find morph 'AWW_Left_Minora_Front_DownMorph'");
                                AWW_Left_Minora_Front_DownMorph = morphUI.GetMorphByUid("Left Pinky Toe Bend");
                            }
                        }
                        catch { };





                        #endregion
                        #region Register Centered Morphs

                        try
                        {
                            VAMExtremeExpansionMorph = morphUI.GetMorphByUid("AWWalker.AWW_GenMorphResources.9:/Custom/Atom/Person/Morphs/female_genitalia/data/3feetwolf/New Genitalia For Victoria 6/Genitalia-default/Morphs/AWWALKER/AWW_Legacy/Genitals-extreme expansion.vmi");
                            if (VAMExtremeExpansionMorph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? Couldn't find morph 'VAMExtremeExpansionMorph'");
                                VAMExtremeExpansionMorph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };
                        try
                        {
                            Genital_TightMorph = morphUI.GetMorphByUid("AWWalker.AWW_GenMorphResources.9:/Custom/Atom/Person/Morphs/female_genitalia/data/3feetwolf/New Genitalia For Victoria 6/Genitalia-default/Morphs/AWWALKER/AWW_Legacy/Genital_Young.vmi");
                            if (Genital_TightMorph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? Couldn't find morph 'Genital Tight'");
                                Genital_TightMorph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };
                        try
                        {
                            Genital_Area_RotationMorph = morphUI.GetMorphByUid("702-Genital-Area-Rotation");
                            if (Genital_Area_RotationMorph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? Couldn't find morph 'Genital_Area_RotationMorph'");
                                Genital_Area_RotationMorph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };
                        #endregion
                        #region Register ANUS Morphs
                        try
                        {
                            AWW_00_KegelMorph = morphUI.GetMorphByUid("AWWalker.AWW_GenMorphResources_Pak2.2:/Custom/Atom/Person/Morphs/female_genitalia/AWWalker/AWWalker_GEN_Morphs3.0/AWW_Kegel.vmi");
                            if (LabMinLMidMorph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? (AWWalker.AWW_GenMorphResources_Pak2.2) Couldn't find morph 'AWW_00_Kegel'");
                                AWW_00_KegelMorph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };
                        try
                        {
                            AWW_Anus_SpreadGape02Morph = morphUI.GetMorphByUid("AWWalker.AWW_GenMorphResources.9:/Custom/Atom/Person/Morphs/female_genitalia/AWWalker/AWWalker_ANUS_Morphs1.0/AWW_Anus_SpreadGape02.vmi");
                            if (LabMinLMidMorph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? AWWalker.AWW_GenMorphResources.9 Couldn't find morph 'AWW_Anus_SpreadGape02'");
                                AWW_Anus_SpreadGape02Morph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };


                        try
                        {
                            AWW_Bend_AN_01Morph = morphUI.GetMorphByUid("AWWalker.AWWalker_MorphPak_Bendover.2:/Custom/Atom/Person/Morphs/female_genitalia/AWWalker/Benders/AWW_Bend_AN_01.vmi");
                            if (AWW_Bend_AN_01Morph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? AWWalker_MorphPak_Bendover.2 Couldn't find morph 'AWW_Bend_AN_01'");
                                AWW_Bend_AN_01Morph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };
                        try
                        {
                            AWW_Bend_AN_02Morph = morphUI.GetMorphByUid("AWWalker.AWWalker_MorphPak_Bendover.2:/Custom/Atom/Person/Morphs/female_genitalia/AWWalker/Benders/AWW_Bend_AN_02.vmi");
                            if (AWW_Bend_AN_02Morph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? AWWalker_MorphPak_Bendover.2 Couldn't find morph 'AWW_Bend_AN_01'");
                                AWW_Bend_AN_02Morph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };
                        try
                        {
                            AWW_Bend_AN_03Morph = morphUI.GetMorphByUid("AWWalker.AWWalker_MorphPak_Bendover.2:/Custom/Atom/Person/Morphs/female_genitalia/AWWalker/Benders/AWW_Bend_AN_03.vmi");
                            if (AWW_Bend_AN_03Morph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? AWWalker_MorphPak_Bendover.2 Couldn't find morph 'AWW_Bend_AN_02'");
                                AWW_Bend_AN_03Morph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };
                        try
                        {
                            AWW_Bend_AN_04Morph = morphUI.GetMorphByUid("AWWalker.AWWalker_MorphPak_Bendover.2:/Custom/Atom/Person/Morphs/female_genitalia/AWWalker/Benders/AWW_Bend_AN_04.vmi");
                            if (AWW_Bend_AN_04Morph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? AWWalker_MorphPak_Bendover.2 Couldn't find morph 'AWW_Bend_AN_03'");
                                AWW_Bend_AN_04Morph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };
                        try
                        {
                            AWW_Bend_AN_05Morph = morphUI.GetMorphByUid("AWWalker.AWWalker_MorphPak_Bendover.2:/Custom/Atom/Person/Morphs/female_genitalia/AWWalker/Benders/AWW_Bend_AN_05.vmi");
                            if (AWW_Bend_AN_05Morph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? AWWalker_MorphPak_Bendover.2 Couldn't find morph 'AWW_Bend_AN_05'");
                                AWW_Bend_AN_05Morph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };
                        #endregion
                        #region Register BenderMorphs
                        try
                        {
                            AWW_Bend_LC_01Morph = morphUI.GetMorphByUid("AWWalker.AWWalker_MorphPak_Bendover.2:/Custom/Atom/Person/Morphs/female_genitalia/AWWalker/Benders/AWW_Bend_LC_01.vmi");
                            if (AWW_Bend_LC_01Morph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? (AWWalker.AWWalker_MorphPak_Bendover.2)Couldn't find morph 'AWW_Bend_LC_01'");
                                AWW_Bend_LC_01Morph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };
                        try
                        {
                            AWW_Bend_LC_02Morph = morphUI.GetMorphByUid("AWWalker.AWWalker_MorphPak_Bendover.2:/Custom/Atom/Person/Morphs/female_genitalia/AWWalker/Benders/AWW_Bend_LC_02.vmi");
                            if (AWW_Bend_LC_02Morph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? (AWWalker.AWWalker_MorphPak_Bendover.2) Couldn't find morph 'AWW_Bend_LC_02'");
                                AWW_Bend_LC_02Morph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };
                        try
                        {
                            AWW_Bend_LC_03Morph = morphUI.GetMorphByUid("AWWalker.AWWalker_MorphPak_Bendover.2:/Custom/Atom/Person/Morphs/female_genitalia/AWWalker/Benders/AWW_Bend_LC_03.vmi");
                            if (AWW_Bend_LC_03Morph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? (AWWalker.AWWalker_MorphPak_Bendover.2) Couldn't find morph 'AWW_Bend_LC_03'");
                                AWW_Bend_LC_03Morph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };
                        try
                        {
                            AWW_Bend_LC_04Morph = morphUI.GetMorphByUid("AWWalker.AWWalker_MorphPak_Bendover.2:/Custom/Atom/Person/Morphs/female_genitalia/AWWalker/Benders/AWW_Bend_LC_04.vmi");
                            if (AWW_Bend_LC_04Morph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? (AWWalker.AWWalker_MorphPak_Bendover.2) Couldn't find morph 'AWW_Bend_LC_04'");
                                AWW_Bend_LC_04Morph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };
                        try
                        {
                            AWW_Bend_LC_05Morph = morphUI.GetMorphByUid("AWWalker.AWWalker_MorphPak_Bendover.2:/Custom/Atom/Person/Morphs/female_genitalia/AWWalker/Benders/AWW_Bend_LC_05.vmi");
                            if (AWW_Bend_LC_05Morph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? (AWWalker.AWWalker_MorphPak_Bendover.2) Couldn't find morph 'AWW_Bend_LC_05'");
                                AWW_Bend_LC_05Morph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };
                        try
                        {
                            AWW_Bend_LC_06Morph = morphUI.GetMorphByUid("AWWalker.AWWalker_MorphPak_Bendover.2:/Custom/Atom/Person/Morphs/female_genitalia/AWWalker/Benders/AWW_Bend_LC_06.vmi");
                            if (AWW_Bend_LC_06Morph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? (AWWalker.AWWalker_MorphPak_Bendover.2) Couldn't find morph 'AWW_Bend_LC_06'");
                                AWW_Bend_LC_06Morph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };
                        try
                        {
                            AWW_Bend_LC_07Morph = morphUI.GetMorphByUid("AWWalker.AWWalker_MorphPak_Bendover.2:/Custom/Atom/Person/Morphs/female_genitalia/AWWalker/Benders/AWW_Bend_LC_07.vmi");
                            if (AWW_Bend_LC_07Morph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? (AWWalker.AWWalker_MorphPak_Bendover.2) Couldn't find morph 'AWW_Bend_LC_07'");
                                AWW_Bend_LC_07Morph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };
                        try
                        {
                            AWW_Bend_LC_08Morph = morphUI.GetMorphByUid("AWWalker.AWWalker_MorphPak_Bendover.2:/Custom/Atom/Person/Morphs/female_genitalia/AWWalker/Benders/AWW_Bend_LC_08.vmi");
                            if (AWW_Bend_LC_08Morph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? (AWWalker.AWWalker_MorphPak_Bendover.2) Couldn't find morph 'AWW_Bend_LC_08'");
                                AWW_Bend_LC_08Morph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };
                        try
                        {
                            AWW_Bend_LC_09Morph = morphUI.GetMorphByUid("AWWalker.AWWalker_MorphPak_Bendover.2:/Custom/Atom/Person/Morphs/female_genitalia/AWWalker/Benders/AWW_Bend_LC_09.vmi");
                            if (AWW_Bend_LC_09Morph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? (AWWalker.AWWalker_MorphPak_Bendover.2) Couldn't find morph 'AWW_Bend_LC_09'");
                                AWW_Bend_LC_09Morph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };


                        #endregion

                        #region New Morphs


                        try
                        {
                            AWW_Anus_Z_Adjust_01Morph = morphUI.GetMorphByUid("AWWalker.AWWalker_GEN_Morphs_Pack_03.2:/Custom/Atom/Person/Morphs/female_genitalia/AWWalker/Pack03/AWW_Anus_Z_Adjust_01.vmi");
                            if (AWW_Anus_Z_Adjust_01Morph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? (AWWalker.AWWalker_GEN_Morphs_Pack_03.2) Couldn't find morph 'AWW_Anus_Z_Adjust_01Morph'");
                                AWW_Anus_Z_Adjust_01Morph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };


                        try
                        {
                            AWW_G2F_Flatter_GenMorph = morphUI.GetMorphByUid("AWWalker.AWWalker_GEN_Morphs_Pack_03.2:/Custom/Atom/Person/Morphs/female_genitalia/AWWalker/Pack03/AWW_G2F_Flatter_Gen.vmi");
                            if (AWW_G2F_Flatter_GenMorph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? (AWWalker.AWWalker_GEN_Morphs_Pack_03.2) Couldn't find morph 'AWW_G2F_Flatter_GenMorph'");
                                AWW_G2F_Flatter_GenMorph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };

                        try
                        {
                            AWW_HoodLength_301Morph = morphUI.GetMorphByUid("AWWalker.AWWalker_GEN_Morphs_Pack_03.2:/Custom/Atom/Person/Morphs/female_genitalia/AWWalker/Pack03/AWW_HoodLength_301.vmi");
                            if (AWW_HoodLength_301Morph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? (AWWalker.AWWalker_GEN_Morphs_Pack_03.2) Couldn't find morph 'AWW_HoodLength_301Morph'");
                                AWW_HoodLength_301Morph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };


                        try
                        {
                            AWW_HoodLength_302Morph = morphUI.GetMorphByUid("AWWalker.AWWalker_GEN_Morphs_Pack_03.2:/Custom/Atom/Person/Morphs/female_genitalia/AWWalker/Pack03/AWW_HoodLength_302.vmi");
                            if (AWW_HoodLength_302Morph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? (AWWalker.AWWalker_GEN_Morphs_Pack_03.2) Couldn't find morph 'AWW_HoodLength_302Morph'");
                                AWW_HoodLength_302Morph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };


                        try
                        {
                            AWW_LowerRegion_Z_01Morph = morphUI.GetMorphByUid("AWWalker.AWWalker_GEN_Morphs_Pack_03.2:/Custom/Atom/Person/Morphs/female_genitalia/AWWalker/Pack03/AWW_LowerRegion_Z_01.vmi");
                            if (AWW_LowerRegion_Z_01Morph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? (AWWalker.AWWalker_GEN_Morphs_Pack_03.2) Couldn't find morph 'AWW_LowerRegion_Z_01Morph'");
                                AWW_LowerRegion_Z_01Morph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };


                        try
                        {
                            AWW_LowerRegion_Z_02Morph = morphUI.GetMorphByUid("AWWalker.AWWalker_GEN_Morphs_Pack_03.2:/Custom/Atom/Person/Morphs/female_genitalia/AWWalker/Pack03/AWW_LowerRegion_Z_02.vmi");
                            if (AWW_LowerRegion_Z_02Morph == null)
                            {
                                SuperController.LogError("Did you download all dependencies? (AWWalker.AWWalker_GEN_Morphs_Pack_03.2) Couldn't find morph 'AWW_LowerRegion_Z_02Morph'");
                                AWW_LowerRegion_Z_02Morph = morphUI.GetMorphByUid("Right Pinky Toe Bend");
                            }
                        }
                        catch { };

                        #endregion


                    }
                }
                torso = containingAtom.GetStorableByID("chestControl") as FreeControllerV3;
                lK1   = containingAtom.GetStorableByID("lKneeControl") as FreeControllerV3;
                rK1   = containingAtom.GetStorableByID("rKneeControl") as FreeControllerV3;
                rT1   = containingAtom.GetStorableByID("rThighControl") as FreeControllerV3;
                lT1   = containingAtom.GetStorableByID("lThighControl") as FreeControllerV3;




            }
            catch (Exception e)
            {
                SuperController.LogError("Exception caught: " + e);
            }
        }
        private void RegisterJSONParams()
        {
            LRSync = new JSONStorableBool("Sync & Lock Left to Right", false);
            LRSync.storeType = JSONStorableParam.StoreType.Full;
            RegisterBool(LRSync);

            quicknessJSON = new JSONStorableFloat("Smoothing Speed", 1f, 0f, 8f, true, true);
            quicknessJSON.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(quicknessJSON);
            
            lerpEnabled = new JSONStorableBool("Smoothing Enabled", true);
            lerpEnabled.storeType = JSONStorableBool.StoreType.Full;
            RegisterBool(lerpEnabled);

            #region Establish morphs (Unsorted)

            OverallIntensity = new JSONStorableFloat("Intensity", 1f, 0f, 2f, false, true);
            OverallIntensity.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(OverallIntensity);

            AWW_Clitoris_HoodSizeRange = new JSONStorableFloat("AWW Hood Size", 0f, -1f, 1f, false, true);
            AWW_Clitoris_HoodSizeRange.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_Clitoris_HoodSizeRange);

            Genital_Tight = new JSONStorableFloat("Genital Tight", 0f, 0f, 1f, false, true);
            Genital_Tight.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(Genital_Tight);

            AWW_Clitoris_SizeRange = new JSONStorableFloat("AWW Clitoris Size", 0f, -1f, 1f, false, true);
            AWW_Clitoris_SizeRange.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_Clitoris_SizeRange);

            AWW_Clitoris_HoodBackRange = new JSONStorableFloat("Hood Back/Forward", 0f, -1f, 1f, false, true);
            AWW_Clitoris_HoodBackRange.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_Clitoris_HoodBackRange);

            AWW_Clitoris_Front_BackRange = new JSONStorableFloat("AWW Clitoris Front_Back", 0f, lmin => AWW_Clitoris_Front_BackRange.SetVal(Mathf.Max(AWW_Clitoris_Front_BackRange.val, lmin)), 0f, 1f, false, true);
            AWW_Clitoris_Front_BackRange.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_Clitoris_Front_BackRange);

            AWW_VagInternal_Size2ChangeMin = new JSONStorableFloat("AWW_VagInternal_Size Min", 0f, lmin => AWW_VagInternal_Size2ChangeMax.SetVal(Mathf.Max(AWW_VagInternal_Size2ChangeMax.val, lmin)), 0f, 1f, false, true);
            AWW_VagInternal_Size2ChangeMin.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_VagInternal_Size2ChangeMin);

            AWW_VagInternal_Size2ChangeMax = new JSONStorableFloat("AWW_VagInternal_Size Max", 0.4266734f, lmax => AWW_VagInternal_Size2ChangeMin.SetVal(Mathf.Min(AWW_VagInternal_Size2ChangeMin.val, lmax)), 0f, 1f, false, true);
            AWW_VagInternal_Size2ChangeMax.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_VagInternal_Size2ChangeMax);

            HoodModMorphChangeMin = new JSONStorableFloat("Labia HoodMod Min", 0.0f, lmin => HoodModMorphChangeMax.SetVal(Mathf.Max(HoodModMorphChangeMax.val, lmin)), -1f, 1f, false, true);
            HoodModMorphChangeMin.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(HoodModMorphChangeMin);

            HoodModMorphChangeMax = new JSONStorableFloat("Labia HoodMod Max", 0.7953953f, lmax => HoodModMorphChangeMin.SetVal(Mathf.Min(HoodModMorphChangeMin.val, lmax)), 0f, 1f, false, true);
            HoodModMorphChangeMax.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(HoodModMorphChangeMax);


            AWW_GenLabiaMajoraClosedAndSmoothMorphMin = new JSONStorableFloat("Majora Closed And Smooth Min", -1f, lmin => AWW_GenLabiaMajoraClosedAndSmoothMorphMax.SetVal(Mathf.Max(AWW_GenLabiaMajoraClosedAndSmoothMorphMax.val, lmin)), -1f, 0f, false, true);
            AWW_GenLabiaMajoraClosedAndSmoothMorphMin.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_GenLabiaMajoraClosedAndSmoothMorphMin);

            AWW_GenLabiaMajoraClosedAndSmoothMorphMax = new JSONStorableFloat("Majora Closed And Smooth Max", 1f, lmax => AWW_GenLabiaMajoraClosedAndSmoothMorphMin.SetVal(Mathf.Min(AWW_GenLabiaMajoraClosedAndSmoothMorphMin.val, lmax)), 0f, 1f, false, true);
            AWW_GenLabiaMajoraClosedAndSmoothMorphMax.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_GenLabiaMajoraClosedAndSmoothMorphMax);

            CurveEnabled = new JSONStorableBool("Apply Curve", true);
            isMultiPassEnabled = new JSONStorableBool("MultiPass Enabled", true);
            RegisterBool(CurveEnabled);
            RegisterBool(isMultiPassEnabled);

            StaticMinApplication = new JSONStorableBool("Use Min Value Only (Static Morphs)", false);
            RegisterBool(StaticMinApplication);

            StaticMaxApplication = new JSONStorableBool("Use Max Value Only (Static Morphs)", false);
            RegisterBool(StaticMaxApplication);

            AWW_PuffyMajora_1Range = new JSONStorableFloat("AWW Puffy Pussy", 0f, -1f, 1f, false, true);
            AWW_PuffyMajora_1Range.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_PuffyMajora_1Range);

            AWWLabiaMinSwell01Range = new JSONStorableFloat("AWW Swollen Minora", 0f, 0f, 1f, false, true);
            AWWLabiaMinSwell01Range.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWWLabiaMinSwell01Range);

            VAMExtremeExpansion = new JSONStorableFloat("Extreme Expansion", 0f, 0f, 1f, false, true);
            VAMExtremeExpansion.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(VAMExtremeExpansion);

            Genital_Area_RotationRange = new JSONStorableFloat("Genital Area Rotation", 0f, -1f, 1f, false, true);
            Genital_Area_RotationRange.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(Genital_Area_RotationRange);

            floatSliderRNDAmt = new JSONStorableFloat("Randomization Strength", 0.25f, 0f, 1f, true, true);
            floatSliderRNDAmt.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(floatSliderRNDAmt);


            AWW_G2F_Flatter_Genmax = new JSONStorableFloat("Flatter Genital", 0f, -1f, 1f, true, true);
            AWW_G2F_Flatter_Genmax.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_G2F_Flatter_Genmax);

            AWW_HoodLength_301max = new JSONStorableFloat("HoodLength 301", 0f, -1f, 1f, true, true);
            AWW_HoodLength_301max.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_HoodLength_301max);

            AWW_HoodLength_302max = new JSONStorableFloat("HoodLength 302", 0f, -1f, 1f, true, true);
            AWW_HoodLength_302max.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_HoodLength_302max);



            #endregion

            #region Establish Majora JSF

            labiaMajoraMorphChangeMin = new JSONStorableFloat("Labia Majora Morph Min", -1.21f, lmin => labiaMajoraMorphChangeMax.SetVal(Mathf.Max(labiaMajoraMorphChangeMax.val, lmin)), -1f, 1f, false, true);
            labiaMajoraMorphChangeMin.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(labiaMajoraMorphChangeMin);

            labiaMajoraMorphChangeMax = new JSONStorableFloat("Labia Majora Morph Max", 2f, lmax => labiaMajoraMorphChangeMin.SetVal(Mathf.Min(labiaMajoraMorphChangeMin.val, lmax)), 0f, 1f, false, true);
            labiaMajoraMorphChangeMax.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(labiaMajoraMorphChangeMax);

            AWW_Majora_LeftUpperTopMorphChangeMin = new JSONStorableFloat("Left Top Tweak Morph Min", -0.4f, lmin => AWW_Majora_LeftUpperTopMorphChangeMax.SetVal(Mathf.Max(AWW_Majora_LeftUpperTopMorphChangeMax.val, lmin)), -1f, 1f, false, true);
            AWW_Majora_LeftUpperTopMorphChangeMin.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_Majora_LeftUpperTopMorphChangeMin);

            AWW_Majora_LeftUpperTopMorphChangeMax = new JSONStorableFloat("Left Top Tweak Morph Max", 0.9f, lmax => AWW_Majora_LeftUpperTopMorphChangeMin.SetVal(Mathf.Min(AWW_Majora_LeftUpperTopMorphChangeMin.val, lmax)), 0f, 1f, false, true);
            AWW_Majora_LeftUpperTopMorphChangeMax.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_Majora_LeftUpperTopMorphChangeMax);

            AWW_Majora_RightUpperTopMorphChangeMin = new JSONStorableFloat("Right Top Tweak Morph Min", -0.4f, lmin => AWW_Majora_RightUpperTopMorphChangeMax.SetVal(Mathf.Max(AWW_Majora_RightUpperTopMorphChangeMax.val, lmin)), -1f, 1f, false, true);
            AWW_Majora_RightUpperTopMorphChangeMin.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_Majora_RightUpperTopMorphChangeMin);

            AWW_Majora_RightUpperTopMorphChangeMax = new JSONStorableFloat("Right Top Tweak Morph Max", 0.9f, lmax => AWW_Majora_RightUpperTopMorphChangeMin.SetVal(Mathf.Min(AWW_Majora_RightUpperTopMorphChangeMin.val, lmax)), 0f, 1f, false, true);
            AWW_Majora_RightUpperTopMorphChangeMax.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_Majora_RightUpperTopMorphChangeMax);

            LabMajLUpMorphChangeMin = new JSONStorableFloat("Labia LabMajLUp Min", 0.3353853f, lmin => LabMajLUpMorphChangeMax.SetVal(Mathf.Max(LabMajLUpMorphChangeMax.val, lmin)), -1f, 1f, false, true);
            LabMajLUpMorphChangeMin.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(LabMajLUpMorphChangeMin);

            LabMajLUpMorphChangeMax = new JSONStorableFloat("Labia LabMajLUp Max", 0.5788063f, lmax => LabMajLUpMorphChangeMin.SetVal(Mathf.Min(LabMajLUpMorphChangeMin.val, lmax)), 0f, 1f, false, true);
            LabMajLUpMorphChangeMax.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(LabMajLUpMorphChangeMax);

            LabMajRUpMorphChangeMin = new JSONStorableFloat("Labia LabMajRUp Min", 0.3353853f, lmin => LabMajRUpMorphChangeMax.SetVal(Mathf.Max(LabMajRUpMorphChangeMax.val, lmin)), -1f, 1f, false, true);
            LabMajRUpMorphChangeMin.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(LabMajRUpMorphChangeMin);

            LabMajRUpMorphChangeMax = new JSONStorableFloat("Labia LabMajRUp Max", 0.5788063f, lmax => LabMajRUpMorphChangeMin.SetVal(Mathf.Min(LabMajRUpMorphChangeMin.val, lmax)), 0f, 1f, false, true);
            LabMajRUpMorphChangeMax.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(LabMajRUpMorphChangeMax);

            LabMajLMidMorphChangeMin = new JSONStorableFloat("Labia LabMajLMid Min", 0.1930835f, lmin => LabMajLMidMorphChangeMax.SetVal(Mathf.Max(LabMajLMidMorphChangeMax.val, lmin)), -1f, 1f, false, true);
            LabMajLMidMorphChangeMin.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(LabMajLMidMorphChangeMin);

            LabMajLMidMorphChangeMax = new JSONStorableFloat("Labia LabMajLMid Max", 0.4f, lmax => LabMajLMidMorphChangeMin.SetVal(Mathf.Min(LabMajLMidMorphChangeMin.val, lmax)), 0f, 1f, false, true);
            LabMajLMidMorphChangeMax.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(LabMajLMidMorphChangeMax);

            LabMajRMidMorphChangeMin = new JSONStorableFloat("Labia LabMajRMid Min", 0.1930835f, lmin => LabMajRMidMorphChangeMax.SetVal(Mathf.Max(LabMajRMidMorphChangeMax.val, lmin)), -1f, 1f, false, true);
            LabMajRMidMorphChangeMin.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(LabMajRMidMorphChangeMin);

            LabMajRMidMorphChangeMax = new JSONStorableFloat("Labia LabMajRMid Max", 0.4f, lmax => LabMajRMidMorphChangeMin.SetVal(Mathf.Min(LabMajRMidMorphChangeMin.val, lmax)), 0f, 1f, false, true);
            LabMajRMidMorphChangeMax.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(LabMajRMidMorphChangeMax);

            LabMajLLowMorphChangeMin = new JSONStorableFloat("Labia LabMajLLow Min", -0.2290757f, lmin => LabMajLLowMorphChangeMax.SetVal(Mathf.Max(LabMajLLowMorphChangeMax.val, lmin)), -1f, 1f, false, true);
            LabMajLLowMorphChangeMin.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(LabMajLLowMorphChangeMin);

            LabMajLLowMorphChangeMax = new JSONStorableFloat("Labia LabMajLLow Max", 0.65f, lmax => LabMajLLowMorphChangeMin.SetVal(Mathf.Min(LabMajLLowMorphChangeMin.val, lmax)), 0f, 1f, false, true);
            LabMajLLowMorphChangeMax.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(LabMajLLowMorphChangeMax);

            LabMajRLowMorphChangeMin = new JSONStorableFloat("Labia LabMajRLow Min", -0.2290757f, lmin => LabMajRLowMorphChangeMax.SetVal(Mathf.Max(LabMajRLowMorphChangeMax.val, lmin)), -1f, 1f, false, true);
            LabMajRLowMorphChangeMin.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(LabMajRLowMorphChangeMin);

            LabMajRLowMorphChangeMax = new JSONStorableFloat("Labia LabMajRLow Max", 0.65f, lmax => LabMajRLowMorphChangeMin.SetVal(Mathf.Min(LabMajRLowMorphChangeMin.val, lmax)), 0f, 1f, false, true);
            LabMajRLowMorphChangeMax.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(LabMajRLowMorphChangeMax);

            #endregion Majora

            #region Establish Minora JSF
            //Minora 

            labiaMinoraMorphChangeMin = new JSONStorableFloat("Labia Minora Morph Min", -0.7f, lmin => labiaMinoraMorphChangeMax.SetVal(Mathf.Max(labiaMinoraMorphChangeMax.val, lmin)), -1f, 1f, false, true);
            labiaMinoraMorphChangeMin.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(labiaMinoraMorphChangeMin);

            labiaMinoraMorphChangeMax = new JSONStorableFloat("Labia Minora Morph Max", 1f, lmax => labiaMinoraMorphChangeMin.SetVal(Mathf.Min(labiaMinoraMorphChangeMin.val, lmax)), 0f, 1f, false, true);
            labiaMinoraMorphChangeMax.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(labiaMinoraMorphChangeMax);

            LabMinLUpMorphChangeMin = new JSONStorableFloat("Labia LabMinLUp Min", -0.25f, lmin => LabMinLUpMorphChangeMax.SetVal(Mathf.Max(LabMinLUpMorphChangeMax.val, lmin)), -1f, 1f, false, true);
            LabMinLUpMorphChangeMin.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(LabMinLUpMorphChangeMin);

            LabMinLUpMorphChangeMax = new JSONStorableFloat("Labia LabMinLUp Max", 0.8f, lmax => LabMinLUpMorphChangeMin.SetVal(Mathf.Min(LabMinLUpMorphChangeMin.val, lmax)), 0f, 1f, false, true);
            LabMinLUpMorphChangeMax.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(LabMinLUpMorphChangeMax);


            LabMinRUpMorphChangeMin = new JSONStorableFloat("Labia LabMinRUp Min", -0.25f, lmin => LabMinRUpMorphChangeMax.SetVal(Mathf.Max(LabMinRUpMorphChangeMax.val, lmin)), -1f, 1f, false, true);
            LabMinRUpMorphChangeMin.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(LabMinRUpMorphChangeMin);

            LabMinRUpMorphChangeMax = new JSONStorableFloat("Labia LabMinRUp Max", 0.8f, lmax => LabMinRUpMorphChangeMin.SetVal(Mathf.Min(LabMinRUpMorphChangeMin.val, lmax)), 0f, 1f, false, true);
            LabMinRUpMorphChangeMax.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(LabMinRUpMorphChangeMax);

            LabMinLMidMorphChangeMin = new JSONStorableFloat("Labia LabMinLMid Min", -0.1f, lmin => LabMinLMidMorphChangeMax.SetVal(Mathf.Max(LabMinLMidMorphChangeMax.val, lmin)), -1f, 1f, false, true);
            LabMinLMidMorphChangeMin.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(LabMinLMidMorphChangeMin);

            LabMinLMidMorphChangeMax = new JSONStorableFloat("Labia LabMinLMid Max", 0.50f, lmax => LabMinLMidMorphChangeMin.SetVal(Mathf.Min(LabMinLMidMorphChangeMin.val, lmax)), 0f, 1f, false, true);
            LabMinLMidMorphChangeMax.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(LabMinLMidMorphChangeMax);

            LabMinRMidMorphChangeMin = new JSONStorableFloat("Labia LabMinRMid Min", -0.1f, lmin => LabMinRMidMorphChangeMax.SetVal(Mathf.Max(LabMinRMidMorphChangeMax.val, lmin)), -1f, 1f, false, true);
            LabMinRMidMorphChangeMin.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(LabMinRMidMorphChangeMin);

            LabMinRMidMorphChangeMax = new JSONStorableFloat("Labia LabMinRMid Max", 0.50f, lmax => LabMinRMidMorphChangeMin.SetVal(Mathf.Min(LabMinRMidMorphChangeMin.val, lmax)), 0f, 1f, false, true);
            LabMinRMidMorphChangeMax.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(LabMinRMidMorphChangeMax);


            LabMinLLowMorphChangeMin = new JSONStorableFloat("Labia LabMinLLow Min", 0f, lmin => LabMinLLowMorphChangeMax.SetVal(Mathf.Max(LabMinLLowMorphChangeMax.val, lmin)), -1f, 1f, false, true);
            LabMinLLowMorphChangeMin.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(LabMinLLowMorphChangeMin);

            LabMinRLowMorphChangeMax = new JSONStorableFloat("Labia LabMinRLow Max", 0.75f, lmax => LabMinRLowMorphChangeMin.SetVal(Mathf.Min(LabMinRLowMorphChangeMin.val, lmax)), 0f, 1f, false, true);
            LabMinRLowMorphChangeMax.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(LabMinRLowMorphChangeMax);

            LabMinRLowMorphChangeMin = new JSONStorableFloat("Labia LabMinRLow Min", 0f, lmin => LabMinRLowMorphChangeMax.SetVal(Mathf.Max(LabMinRLowMorphChangeMax.val, lmin)), -1f, 1f, false, true);
            LabMinRLowMorphChangeMin.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(LabMinRLowMorphChangeMin);

            LabMinLLowMorphChangeMax = new JSONStorableFloat("Labia LabMinLLow Max", 0.75f, lmax => LabMinLLowMorphChangeMin.SetVal(Mathf.Min(LabMinLLowMorphChangeMin.val, lmax)), 0f, 1f, false, true);
            LabMinLLowMorphChangeMax.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(LabMinLLowMorphChangeMax);

            #endregion

            #region Establish Anus JSF
            //ANUS MORPHS
            //AWW_00_Kegel
            AWW_00_KegelMin = new JSONStorableFloat("Cinch Ass Min", 0f, lmin => AWW_00_KegelMax.SetVal(Mathf.Max(AWW_00_KegelMax.val, lmin)), 0f, 1f, false, true);
            AWW_00_KegelMin.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_00_KegelMin);

            AWW_00_KegelMax = new JSONStorableFloat("Cinch Ass Max", 1f, lmax => AWW_00_KegelMin.SetVal(Mathf.Min(AWW_00_KegelMin.val, lmax)), 0f, 1f, false, true);
            AWW_00_KegelMax.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_00_KegelMax);

            AWW_Anus_SpreadGape02Min = new JSONStorableFloat("Anus_SpreadGape Min", 0.0f, lmin => AWW_Anus_SpreadGape02Max.SetVal(Mathf.Max(AWW_Anus_SpreadGape02Max.val, lmin)), -1f, 1f, false, true);
            AWW_Anus_SpreadGape02Min.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_Anus_SpreadGape02Min);

            AWW_Anus_SpreadGape02Max = new JSONStorableFloat("Anus_SpreadGape Max", 0.7047029f, lmax => AWW_Anus_SpreadGape02Min.SetVal(Mathf.Min(AWW_Anus_SpreadGape02Min.val, lmax)), 0f, 1f, false, true);
            AWW_Anus_SpreadGape02Max.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_Anus_SpreadGape02Max);

            #endregion

            #region Establish Minora Asymmetrical Floats

            flLMinB1D = new JSONStorableFloat("Minora L Back 1 Down/Up", 0f, -1f, 1f, false, true);
            flLMinB1D.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(flLMinB1D);

            flLMinB2D = new JSONStorableFloat("Minora L Back 2 Down/Up", 0f, -1f, 1f, false, true);
            flLMinB2D.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(flLMinB2D);

            flLMinB3D = new JSONStorableFloat("Minora L Back 3 Down/Up", 0f, -1f, 1f, false, true);
            flLMinB3D.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(flLMinB3D);

            flLMinM1D = new JSONStorableFloat("Minora L Mid 1 Down/Up", 0f, -1f, 1f, false, true);
            flLMinM1D.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(flLMinM1D);

            flLMinM2D = new JSONStorableFloat("Minora L Mid 2 Down/Up", 0f, -1f, 1f, false, true);
            flLMinM2D.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(flLMinM2D);

            flLMinM3D = new JSONStorableFloat("Minora L Mid 3 Down/Up", 0f, -1f, 1f, false, true);
            flLMinM3D.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(flLMinM3D);

            flRMinB1D = new JSONStorableFloat("Minora R Back 1 Down/Up", 0f, -1f, 1f, false, true);
            flRMinB1D.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(flRMinB1D);

            flRMinB2D = new JSONStorableFloat("Minora R Back 2 Down/Up", 0f, -1f, 1f, false, true);
            flRMinB2D.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(flRMinB2D);

            flRMinB3D = new JSONStorableFloat("Minora R Back 3 Down/Up", 0f, -1f, 1f, false, true);
            flRMinB3D.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(flRMinB3D);

            flRMinM1D = new JSONStorableFloat("Minora R Mid 1 Down/Up", 0f, -1f, 1f, false, true);
            flRMinM1D.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(flRMinM1D);

            flRMinM2D = new JSONStorableFloat("Minora R Mid 2 Down/Up", 0f, -1f, 1f, false, true);
            flRMinM2D.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(flRMinM2D);

            flRMinM3D = new JSONStorableFloat("Minora R Mid 3 Down/Up", 0f, -1f, 1f, false, true);
            flRMinM3D.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(flRMinM3D);

            flLMinFD = new JSONStorableFloat("Minora L Front Down/Up", 0f, -1f, 1f, false, true);
            flLMinFD.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(flLMinFD);

            flRMinFD = new JSONStorableFloat("Minora R Front Down/Up", 0f, -1f, 1f, false, true);
            flRMinFD.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(flRMinFD);
            #endregion

            #region Register Bender Floats
            AWW_Bend_AN_01min = new JSONStorableFloat("Anus Bend Fix 01 min", 0f, -1f, 1f, false, true);
            AWW_Bend_AN_01min.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_Bend_AN_01min);

            AWW_Bend_AN_02min = new JSONStorableFloat("Anus Bend Fix 02 min", 0f, -1f, 1f, false, true);
            AWW_Bend_AN_02min.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_Bend_AN_02min);

            AWW_Bend_AN_03min = new JSONStorableFloat("Anus Bend Fix 03 min", 0f, -1f, 1f, false, true);
            AWW_Bend_AN_03min.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_Bend_AN_03min);

            AWW_Bend_AN_04min = new JSONStorableFloat("Anus Bend Fix 04 min", 0f, -1f, 1f, false, true);
            AWW_Bend_AN_04min.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_Bend_AN_04min);


            AWW_Bend_AN_05min = new JSONStorableFloat("Anus Bend Fix 05 min", 0f, -1f, 1f, false, true);
            AWW_Bend_AN_05min.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_Bend_AN_05min);

            AWW_Bend_AN_01max = new JSONStorableFloat("Anus Bend Fix 01 max", 0f, -1f, 1f, false, true);
            AWW_Bend_AN_01max.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_Bend_AN_01max);

            AWW_Bend_AN_02max = new JSONStorableFloat("Anus Bend Fix 02 max", 0f, -1f, 1f, false, true);
            AWW_Bend_AN_02max.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_Bend_AN_02max);

            AWW_Bend_AN_03max = new JSONStorableFloat("Anus Bend Fix 03 max", 0f, -1f, 1f, false, true);
            AWW_Bend_AN_03max.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_Bend_AN_03max);

            AWW_Bend_AN_04max = new JSONStorableFloat("Anus Bend Fix 04 max", 0f, -1f, 1f, false, true);
            AWW_Bend_AN_04max.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_Bend_AN_04max);

            AWW_Bend_AN_05max = new JSONStorableFloat("Anus Bend Fix 05 max", 0f, -1f, 1f, false, true);
            AWW_Bend_AN_05max.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_Bend_AN_05max);


            AWW_Bend_LC_01min = new JSONStorableFloat("Gen Bend Fix 01 min", 0f, -1f, 1f, false, true);
            AWW_Bend_LC_01min.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_Bend_LC_01min);

            AWW_Bend_LC_02min = new JSONStorableFloat("Gen Bend Fix 02 min", 0f, -1f, 1f, false, true);
            AWW_Bend_LC_02min.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_Bend_LC_02min);

            AWW_Bend_LC_03min = new JSONStorableFloat("Gen Bend Fix 03 min", 0f, -1f, 1f, false, true);
            AWW_Bend_LC_03min.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_Bend_LC_03min);

            AWW_Bend_LC_04min = new JSONStorableFloat("Gen Bend Fix 04 min", 0f, -1f, 1f, false, true);
            AWW_Bend_LC_04min.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_Bend_LC_04min);

            AWW_Bend_LC_05min = new JSONStorableFloat("Gen Bend Fix 05 min", 0f, -1f, 1f, false, true);
            AWW_Bend_LC_05min.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_Bend_LC_05min);

            AWW_Bend_LC_06min = new JSONStorableFloat("Gen Bend Fix 06 min", 0f, -1f, 1f, false, true);
            AWW_Bend_LC_06min.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_Bend_LC_06min);

            AWW_Bend_LC_07min = new JSONStorableFloat("Gen Bend Fix 07 min", 0f, -1f, 1f, false, true);
            AWW_Bend_LC_07min.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_Bend_LC_07min);

            AWW_Bend_LC_08min = new JSONStorableFloat("Gen Bend Fix 08 min", 0f, -1f, 1f, false, true);
            AWW_Bend_LC_08min.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_Bend_LC_08min);

            AWW_Bend_LC_09min = new JSONStorableFloat("Gen Bend Fix 09 min", 0f, -1f, 1f, false, true);
            AWW_Bend_LC_09min.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_Bend_LC_09min);


            AWW_Bend_LC_01max = new JSONStorableFloat("Gen Bend Fix 01 max", 0f, -1f, 1f, false, true);
            AWW_Bend_LC_01max.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_Bend_LC_01max);

            AWW_Bend_LC_02max = new JSONStorableFloat("Gen Bend Fix 02 max", 0f, -1f, 1f, false, true);
            AWW_Bend_LC_02max.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_Bend_LC_02max);

            AWW_Bend_LC_03max = new JSONStorableFloat("Gen Bend Fix 03 max", 0f, -1f, 1f, false, true);
            AWW_Bend_LC_03max.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_Bend_LC_03max);

            AWW_Bend_LC_04max = new JSONStorableFloat("Gen Bend Fix 04 max", 0f, -1f, 1f, false, true);
            AWW_Bend_LC_04max.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_Bend_LC_04max);

            AWW_Bend_LC_05max = new JSONStorableFloat("Gen Bend Fix 05 max", 0f, -1f, 1f, false, true);
            AWW_Bend_LC_05max.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_Bend_LC_05max);

            AWW_Bend_LC_06max = new JSONStorableFloat("Gen Bend Fix 06 max", 0f, -1f, 1f, false, true);
            AWW_Bend_LC_06max.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_Bend_LC_06max);

            AWW_Bend_LC_07max = new JSONStorableFloat("Gen Bend Fix 07 max", 0f, -1f, 1f, false, true);
            AWW_Bend_LC_07max.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_Bend_LC_07max);

            AWW_Bend_LC_08max = new JSONStorableFloat("Gen Bend Fix 08 max", 0f, -1f, 1f, false, true);
            AWW_Bend_LC_08max.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_Bend_LC_08max);

            AWW_Bend_LC_09max = new JSONStorableFloat("Gen Bend Fix 09 max", 0f, -1f, 1f, false, true);
            AWW_Bend_LC_09max.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_Bend_LC_09max);
            

            AWW_Anus_Z_Adjust_01max = new JSONStorableFloat("Anus Z Adjust", 0f, -1f, 1f, false, true);
            AWW_Anus_Z_Adjust_01max.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_Anus_Z_Adjust_01max);

            AWW_LowerRegion_Z_02max = new JSONStorableFloat("Vagina Length 01", 0f, -1f, 1f, false, true);
            AWW_LowerRegion_Z_02max.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_LowerRegion_Z_02max);

            AWW_LowerRegion_Z_01max = new JSONStorableFloat("Vagina Length 02", 0f, -1f, 1f, false, true);
            AWW_LowerRegion_Z_01max.storeType = JSONStorableParam.StoreType.Full;
            RegisterFloat(AWW_LowerRegion_Z_01max);



            #endregion
        }

        #region Custom UI Creations
        private void createTitle(string textTitle, Color tColor, string info, Color iColor)
        {
            UIDynamicButton bTitleLMJMax = CreateButton(textTitle, false);
            UIDynamicButton bTitleLMJMin = CreateButton(info, true);
            bTitleLMJMin.textColor = tColor;
            bTitleLMJMax.textColor = iColor;
            bTitleLMJMin.buttonText.fontSize = 20;
            bTitleLMJMax.buttonColor = cClear;
            bTitleLMJMin.buttonColor = cClear;
            bTitleLMJMax.buttonText.fontSize = 40;
            _currentUI.Add(bTitleLMJMin, bTitleLMJMax);
        }
        private void createSectionTitle(string textTitle, Color tColor, string info, Color iColor)
        {
            UIDynamicButton bTitleLMJMax = CreateButton(textTitle, false);
            UIDynamicButton bTitleLMJMin = CreateButton(info, true);
            bTitleLMJMin.textColor = tColor;
            bTitleLMJMax.textColor = iColor;
            bTitleLMJMin.buttonText.fontSize = 40;
            bTitleLMJMax.buttonColor = cClear;
            bTitleLMJMin.buttonColor = cClear;
            bTitleLMJMax.buttonText.fontSize = 40;
            _currentUI.Add(bTitleLMJMin, bTitleLMJMax);
        }
        private void createMorphSLIDER(JSONStorableFloat jFloat, Color jColor, bool isRightSide)
        {
            //if (isRightSide) { jColor = cBlue; }
            //else { jColor = cMagenta; };

            var sldSlider = CreateSlider(jFloat, isRightSide);
            try { sldSlider.label = sldSlider.label.Replace("_", " ").Replace("LabMajR", "Right ").Replace("LabMajL", "Left ").Replace("LabMinR", "Right ").Replace("LabMinL", "Left "); } catch { };
            try { sldSlider.labelText.color = jColor; } catch { };
            try { sldSlider.labelText.fontSize = 25; } catch { };
            try { sldSlider.height = 10; } catch { };
            _currentUI.Add(sldSlider);

        }
        private void createSLIDER(JSONStorableFloat sldJSF, Color cColor, bool isRightSide)
        {
            var sldSliderObj = CreateSlider(sldJSF, isRightSide);
            sldSliderObj.labelText.color = cColor;
            _currentUI.Add(sldSliderObj);

        }
        private void createStdSLIDER(JSONStorableFloat jFloat, Color jColor, int fontSize, bool isRightSide)
        {
            var sldSlider = CreateSlider(jFloat, isRightSide);
            try { sldSlider.name = sldSlider.name.Replace("_", "").Replace("AWW", ""); } catch { };
            try { sldSlider.labelText.color = jColor; } catch { };
            try { sldSlider.labelText.fontSize = fontSize; } catch { };
            _currentUI.Add(sldSlider);

        }
        private void createSPACER(float height)
        {
            var SP1 = CreateSpacer(false);
            SP1.height = height;
            var SP2 = CreateSpacer(true);
            SP2.height = height;
            _currentUI.Add(SP1);
            _currentUI.Add(SP2);
        }
        private void createLeftSPACER(float height)
        {
            var CLSP = CreateSpacer(false);
            CLSP.height = height;
            _currentUI.Add(CLSP);
        }
        private void createRightSPACER(float height)
        {
            var spacer = CreateSpacer(true);
            spacer.height = height;
            _currentUI.Add(spacer);
        }
        #endregion 
        public void slm(string MSG)

        {
            SuperController.LogMessage(MSG);
        }
    }
}
